概述:
Python中,构造函数(constructor)
和析构函数(destructor)
同为类中默认存在的无初始内容函数(可写入内容),且都在会在对对象执行操作时调用。
不同的是构造函数在创建对象后
自动被调用,而析构函数在对象被销毁前
(作为垃圾被收集)自动被调用。两者有异曲同工之妙。
可以说构造函数和析构函数就相当于两个哨兵,创建对象时,构造函数告诉计算机,我要申请实例化对象所需的内存,销毁对象时,析构函数告诉计算机,这些内存可以被回收并释放了。
测试:
- 调用次序
创建一个类并初始化构造函数__init__
和析构函数__del__
的内容,并且将析构函数放在最前定义,构造函数放在最后定义:
class Person:
def __del__(self):
print("这里是析构函数")
def say(self):
print("这里是自定义方法")
def __init__(self):
print("这里是构造函数")
per = Person()
per.say()
输出结果:
这里是构造函数
这里是自定义方法
这里是析构函数
在创建对象时进行初始化工作
class Person:
def say(self):
print("Hello, I am %s, %d years old"% (self.name, self.age))
def __init__(self, name, age): #参数是name和age,self不需要传参
self.name = name
self.age = age
per1 = Person("Tom", 18) #在创建对象时进行传参初始化
per1.say()
per2 = Person("Jerry", 16)
per2.say()
打印结果
Hello, I am Tom, 18 years old
Hello, I am Jerry, 16 years old
在实例化类时,必须写上且写全构造函数中的参数(不包括self),以次来进行属性的初始化。
附:
- 构造函数可以利用参数列表进行初始化对象属性,但是析构函数只能有一个默认的
self
参数,不能自定义其他参数。 - 构造函数和析构函数是自动调用的,但是也可以主动调用:使用
className.__init__()
。 - 析构函数一般无需写入内容,因为Python有垃圾回收机制,不需要手动释放。
概述:
Python中,构造函数(constructor)
和析构函数(destructor)
同为类中默认存在的无初始内容函数(可写入内容),且都在会在对对象执行操作时调用。
不同的是构造函数在创建对象后
自动被调用,而析构函数在对象被销毁前
(作为垃圾被收集)自动被调用。两者有异曲同工之妙。
可以说构造函数和析构函数就相当于两个哨兵,创建对象时,构造函数告诉计算机,我要申请实例化对象所需的内存,销毁对象时,析构函数告诉计算机,这些内存可以被回收并释放了。
测试:
- 调用次序
创建一个类并初始化构造函数__init__
和析构函数__del__
的内容,并且将析构函数放在最前定义,构造函数放在最后定义:
class Person:
def __del__(self):
print("这里是析构函数")
def say(self):
print("这里是自定义方法")
def __init__(self):
print("这里是构造函数")
per = Person()
per.say()