如何理解python对象

一、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编程能力不可或缺的一部分。

后端开发标签