目录
前言
本次就pythton中的_del_ 方法与_call_方法进行学习,做学习笔记。
一、__dell__方法
1.介绍
__dell__方法称为“析构方法”,用于实现对象被销毁时所需的操作。比如释放对象占用的资源。
python实现自动的垃圾回收,当对象没有被引用时(引用计数(对象被引用的次数)为0),由垃圾回收器调用_dell_方法。
我们也可以通过del语句删除对象,从而保证调用__dell__方法。
系统会通过del方法,一般不需要自定义析构方法。
2.使用方法
#析构方法
class person:
def __del__(self):
print("销毁对象{0}".format(self))
print("这里展示一下")
s1=person()
s2=person()
del s2 #删除s2
print("程序结束")
程序结果:
3.代码分析
s1引用对象persnon,执行del里面的方法。故输出“销毁对象和这里展示一下”。
然而s2被del方法给删除了,故不再调用del方法,所以什么都没有输出。直接跳到最后“程序结束”。
整个程序执行完之后,person对象也没有被引用了,就直接执行一次del方法销毁了s1,输出“销毁对象和这里展示一下”。
二、__call__方法
1.介绍
定义了__call__方法的对心啊先给,成为“可调用对象”,即该对象可以像函数一样被调用。
2.使用方法
#测试可调用方法__call__() class SalaryAccount: '''工资计算类''' def __call__(self, salary): print("算工资。。。") yearsalary=salary*12 daysalary=salary//22.5 hoursalary=salary//8 return dict(yearsalary=yearsalary,daysalary=daysalary,hoursalary=hoursalary) #返回对象(方法也是对象)的值 a=SalaryAccount() a(30000) #执行a的方法 print("****************") print(a(30000)) #打印a的整体,类似打印a的值 print("****************") class SalaryAccount1: '''工资计算类''' def __call__(self, salary): print("算工资。。。") yearsalary=salary*12 daysalary=salary//22.5 hoursalary=salary//8 #return dict(yearsalary=yearsalary,daysalary=daysalary,hoursalary=hoursalary) a=SalaryAccount1() a(30000) print("****************") print(a(30000))
程序结果:
3.代码分析
a(3000)仅仅执行__call__方法,并返回SalaryAccount对象的值。
而print(a(3000))不仅执行方法,并将返回的值输出来。
相较与对象SalaryAccount2,仅仅将返回的值注释掉。同样的程序,使用print(a(3000))输出的是None ,可见对于__call__方法不返回值的话就是假(None)。
总结
dell方法与call方法比较简单,就是理解有些绕弯。
多举例,多总结,多走弯路。