2022.08.13 DAY29
__del__方法(析构函数)和垃圾回收机制
- __del__方法称为"析构方法",用于实现对象被销毁时所需要的操作。比如:释放对象占用的资源。
- Python实现自动的垃圾回收,当对象没有被引用时(引用计数为0),由垃圾回收器调用__del__方法。
- 我们使用del语句删除对象,从而保证调用了__del__方法。
- 系统会自动调用__del__方法,一般不需要自定义析构方法。
实例:
# 析构函数
class Person:
def __del__(self):
print("销毁对象:{0}".format(self))
if __name__ == "__main__":
p1 = Person()
p2 = Person()
del p2
print("程序结束")
结果:
销毁对象:<__main__.Person object at 0x000001E1E3C51D00>
程序结束
销毁对象:<__main__.Person object at 0x000001E1E3BD8400>
__call__方法
- 定义了__call__方法的对象,称为“可调用对象”,即该对象可以像调用函数一样去调用。
实例:
# 测试可调用方法__call__()
class SalaryAccount():
""" 工资计算类 """
def __call__(self, salary):
print("算工资了:")
yourSalary = salary * 12
daySalary = salary // 22.5
hourSalary = salary // 8
return dict(yourSalary = yourSalary, monthSalary = salary, daySalary = hourSalary)
def test2():
s = SalaryAccount()
print(s(3000))
if __name__ == "__main__":
test2()
结果:
算工资了:
{'yourSalary': 36000, 'monthSalary': 3000, 'daySalary': 375}
方法没有重载
- 在其他语言中,可以定义多个重名的方法。
- Python中,方法的参数没有类型(调用时确定参数的类型),参数的数量也可以由可变参数控制。因此,Python中没有方式是重载的。
- 定义一个方法即有多种调用方式,相当于实现了其他语言中的方法的重载。
- 定义多个重名的方法,只有最后一个有效。