python构造函数和析构函数
一、构造函数
1、定义
构造函数__ init __称为class的构造函数与构造方法,一般作为实例化设置初始值而存在的。即一般是为了初始化对象时将必须要用到的属性、方法做一些定义,而存在。
2、作用
- __ init __(self)这个是构造方法,实例化一个对象时,这个方法就会在对象创建时自动调用,实例化类就是创建对象,就会调用这个方法。
- 实例化对象是可以传入参数的,这些参数被传入init方法中,可通过重写方法来自定义对象初始化操作。
3、示例
定义一个Animal类,初始化name名称和color颜色的属性。对象实例化,并调用test方法后,再返回定义对象的属性。
class Animal():
#构造函数
def __init__(self,name,color):
print('构造函数运行')
self.name = name
self.color = color
def test(self):
print('自定义函数运行')
return self.name,self.color
animal = Animal('天鹅','白色')
print(animal.test())
结果:
构造函数运行
自定义函数运行
('天鹅', '白色')
二、析构函数
1、定义
析构函数(destructor)与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已经调用完毕),系统会自动执行析构函数,析构函数往往用来做清理善后的工作,比如说在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存。
2、作用
主要是销毁/删除临时的变量,主要对那些长期占用内存的临时变量进行销毁,其方法是del。
3、示例
- 析构函数---手动释放内存
class Animal():
def __init__(self,name,color):
print('构造函数运行')
self.name = name
self.color = color
def test(self):
print('自定义函数运行')
return self.name,self.color
def __del__(self):
#析构函数
print('释放内存资源')
animal_one = Animal('天鹅','白色')
del animal_one #手动释放资源
def run():
animal_two = Animal('天鹅', '白色')
print(animal_two.test())
run()
结果:
构造函数运行
释放内存资源
构造函数运行
自定义函数运行
('天鹅', '白色')
释放内存资源
手动释放资源可以利用del方法。
- 析构函数---系统自动释放内存
class Animal():
def __init__(self,name,color):
print('构造函数运行')
self.name = name
self.color = color
def test(self):
print('自定义函数运行')
return self.name,self.color
def __del__(self):
#析构函数
print('释放内存资源')
animal_one = Animal('天鹅','白色')
def run():
animal_two = Animal('天鹅', '白色')
print(animal_two.test())
run()
结果:
构造函数运行
构造函数运行
自定义函数运行
('天鹅', '白色')
释放内存资源
释放内存资源
这里需要注意自动释放资源与手动释放资源的区别。手动释放资源时,可以选择在哪一个环节释放变量资源,而在系统释放资源是在程序调用完成后,再释放资源,一般是在程序执行最后才进行资源释放。