Python构造函数及解构函数介绍

Python是一种面向对象的编程语言 , 它支持构造函数和解构函数 。构造函数是在实例化对象时调用的函数 , 用于初始化对象的属性 。解构函数是在对象被销毁时调用的函数 , 用于清理对象所占用的资源 。本文将从多个角度介绍Python构造函数和解构函数的相关知识 。
1. 构造函数

Python构造函数及解构函数介绍

文章插图
构造函数是在实例化对象时自动调用的函数 , 它用于初始化对象的属性 。在Python中 , 构造函数的名称为__init__() , 它必须在类中定义 。例如:
```
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("Tom", 20)
print(p1.name)# 输出Tom
print(p1.age)# 输出20
```
在上面的代码中 , 我们定义了一个Person类 , 并在其构造函数中初始化了name和age属性 。然后 , 我们创建了一个名为p1的Person对象 , 并打印了其属性值 。
需要注意的是 , 构造函数可以有默认参数 , 例如:
```
class Person:
def __init__(self, name="Tom", age=20):
self.name = name
self.age = age
p1 = Person()
print(p1.name)# 输出Tom
print(p1.age)# 输出20
```
在上面的代码中 , 我们在构造函数中为name和age设置了默认值 , 因此在创建对象时不必传递参数 , 这将使用默认值 。
2. 解构函数
解构函数是在对象被销毁时自动调用的函数 , 它用于清理对象所占用的资源 。在Python中 , 解构函数的名称为__del__() , 它必须在类中定义 。例如:
```
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __del__(self):
print("对象已被销毁")
p1 = Person("Tom", 20)
del p1
```
在上面的代码中 , 我们定义了一个Person类 , 并在其解构函数中打印了一条消息 。然后 , 我们创建了一个名为p1的Person对象 , 并使用del关键字将其销毁 。在销毁对象时 , 解构函数自动调用 , 打印出了一条消息 。
需要注意的是 , 解构函数不是必须的 , Python会自动释放对象所占用的内存 。但是 , 如果对象需要释放其他资源 , 例如文件句柄或网络连接等 , 则应在解构函数中进行清理 。
3. 构造函数和解构函数的调用顺序
在Python中 , 当实例化对象时 , 构造函数会自动调用 。当对象被销毁时 , 解构函数也会自动调用 。但是 , 它们的调用顺序可能会有所不同 。例如:
```
class Person:
def __init__(self, name):
self.name = name
print("构造函数被调用")
def __del__(self):
print("解构函数被调用")
p1 = Person("Tom")
p2 = p1
del p1
del p2
```
在上面的代码中 , 我们定义了一个Person类 , 并在其构造函数和解构函数中分别打印了一条消息 。然后 , 我们创建了两个Person对象p1和p2 , 并使用del关键字将p1和p2都销毁 。在销毁对象时 , Python会自动调用解构函数 , 但是它们的调用顺序可能会有所不同 。
在上面的示例中 , 我们先创建了一个名为p1的Person对象 , 并将其赋值给p2 。然后 , 我们使用del关键字将p1销毁 , 此时会自动调用解构函数 。但是 , p2还存在 , 因此它不会被销毁 。最后 , 当我们使用del关键字将p2销毁时 , 会自动调用解构函数 。

推荐阅读