一、Python对象简介
Python是一种解释型的高级面向对象编程语言,任何东西都是对象,整数、浮点数、字符串、元组、列表、甚至是函数等等都是对象。Python的面向对象编程非常强大,每个对象都有其自身的属性和方法。Python的面向对象编程理念是一切皆对象,紧密地融入到这种编程语言的设计思想和语言特性之中。Python在数据类型、语句和流程控制、模块和包、异常处理等方面都是完全面向对象的。
Python的内置函数type()可以返回变量所引用的对象类型,比如:
a = 1
print(type(a)) # <class 'int'>
可以看出,整数1是一个int类型的对象。
二、Python对象的组成
Python的对象由两个方面组成:一是数据,二是方法。方法是可以访问和操作数据的函数,方法就是为特定的对象所定义,访问方式是object.method_name(args),其中object是某个对象,method_name是对象的某个方法名字,调用时传入method_name所需要的参数args。例如,list对象有append()方法,表示在列表中添加元素,使用方式如下:
a_list = [1, 2, 3]
a_list.append(4) # 列表添加元素4
print(a_list) # 输出结果:[1, 2, 3, 4]
1. 对象数据
对象数据指的是Python对象保存的可变或不可变数据,包括数字、序列、映射、实例等。Python的对象是动态的,即Python中的对象是可以改变状态的。Python管理对象的内存分为两个部分:
堆是所有对象的存储位置,堆以不同的方式处理细节,包括跟踪内存使用情况、在对象存活时释放内存。
堆栈是管理在特定时间活动的Python代码块的数据结构。
Python内置了许多对象数据类型,其中包括:bool类型、int类型、float类型、complex类型、字符串类型、列表类型、元组类型、字典类型、集合类型、frozenset类型等。这些数据类型所支持的操作包括算术、比较、逻辑、位、索引和切片等。
2. 对象方法
对象方法指的是Python对象所包含的可调用函数,方法是指与特定类型、特定对象相关联的函数。Python的面向对象设计中,对象数据和方法是经过明确定义和分离的。方法可以修改对象数据,也可以返回一个值。方法调用方式为对象.方法(),例如字符串类型的capitalize()方法:
a_str = 'hello'
a_str.capitalize() # 将字符串首字母大写
print(a_str) # 输出结果:'Hello'
三、Python对象的特点
1. Python对象的动态性
Python的对象本质上是动态类型的,一个对象可以是任何类型,我们可以随时修改变量的类型:
a = 1
a = 'hello'
这里a既可以是整数类型,也可以被重新赋值为字符串类型,这可以看作是Python的动态特性。
2. Python对象的引用计数
Python的内存管理器会随时监视内存分配的情况,当某个对象的引用计数归零时,该对象就会被释放。Python的引用机制是自动的,我们不需要手动地去管理内部内存,避免频繁地向系统申请空间导致程序效率降低的问题。
3. Python对象之间的互通性
Python的对象之间可以相互转化,任何实例或类型都可以转换为一个字符串,使用内置的str()方法,也可以使用内置的repr()方法获得一个对象的表示形式。可以使用内置函数isinstance()检查一个实例是否为某个类的实例。因此,Python对于函数参数和返回值的类型做了较严格的约束,以满足Python的强类型语言的要求。
四、如何创建Python对象
Python中的对象可以直接创建,也可以从其他对象转换而来。Python中使用=运算符来创建一个变量(或者说创建一个名称),变量名本质上是一个指向当前变量对象的引用。创建对于整数、浮点数和字符串这样的 Python 对象的方法,是通过直接给它们指定的值来实现的。
1. 创建整数型对象
在Python中创建一个整数对象,可以将一个整数值直接赋值给一个变量,也可以进行简单的算术操作,例如:
a = 1
b = 2
c = a + b
print(c) # 3
2. 创建浮点型对象
Python中创建浮点数对象,可以使用小数点,也可以使用科学计数法:
a = 1.0
b = 2e3
c = 1.2e-4
print(a, b, c) # 1.0 2000.0 0.00012
3. 创建字符串对象
Python中使用单引号、双引号、三引号(多行字符串)来创建字符串对象,例如:
a = 'hello'
b = "world"
c = """hello
world"""
print(a, b, c)
4. 创建列表,元组和字典
Python中使用[]来创建一个列表对象,使用()来创建一个元组对象,使用{}来创建一个字典对象:
a_list = [1, 2, 3]
a_tuple = (4, 5, 6)
a_dict = {'a': 1, 'b': 2, 'c': 3}
print(a_list, a_tuple, a_dict)
5. 创建自定义类的对象
使用class关键字,可以自己定义一个类,类中定义了如何初始化对象的__init__方法。例如,下面这个自定义类定义了一个汽车的类:
class Car:
"""定义了一个汽车的类"""
def __init__(self, brand, model, price):
self.brand = brand
self.model = model
self.price = price
car = Car('宝马', 'x5', 60)
print(car.brand, car.model, car.price)
五、如何理解Python对象的引用
1. Python变量与对象的关系
在 Python 中,变量和对象的关系经常会让人感到困惑,对此我们提供以下解释:
变量是通过赋值语句创建的名字,或者说创建了一个指向某个对象的引用。
对象是分配在堆内存中的,Python使用引用计数来跟踪对象。对象只有在其引用计数为零时才被删除。
在Python中变量名更应该理解成为指针(或者说引用),一个指针可以引用任何类型的对象,一个对象也可以被多个指针引用,例如:
a = 1 # a指向整数对象1
b = a
c = b
print(a, b, c) # 1 1 1
变量a、b、c都指向同一个整数对象1。
2. Python中的共享引用
在Python中使用共享引用可以节省内存,共享引用就是当多个变量引用相同的不可变对象时,Python会自动创建该对象的一个单例实例以供所有变量共享使用,例如:
a = 1
b = 1
print(a is b) # True
3. Python中的可变对象与不可变对象
在Python中,不可变的填充不容易分配和收回,Python在内部会维护一个缓存区域,用于存储一些常量对象和短字符串等。Python中的数字类型、字符串类型、元组类型都是不可变对象,而列表和字典类型则是可变对象。
使用可变类型时,对变量所引用的对象进行操作,对象的内容可能会发生改变,变量仍然指向这个对象。例如:
a_list = [1, 2, 3]
b_list = a_list
a_list.append(4)
print(b_list) # 输出结果:[1, 2, 3, 4]
我们可以看到,改变一个列表对象使其内部内容改变,其他引用该对象的变量也会受到影响。
六、结论
本文对Python的面向对象编程进行了介绍,分别从Python对象的组成、特点、创建和Python对象的引用等方面进行了阐述。通过本文可得知:
Python对象由数据和方法组成,方法是访问和操作数据的函数。
Python对象是动态类型的,可以随时修改变量的类型。
Python中的赋值语句实际上是创建一个引用或指针,指向内存中的某个对象。
Python对象之间可以相互转换,任何实例或类型都可以转换为一个字符串。
深入了解Python的面向对象编程,对写出更优秀的Python程序有很大帮助,并且也是提高Python编程能力不可或缺的一部分。