__del__方法与__call__方法学习(学习笔记)

目录

前言

一、__dell__方法

1.介绍

2.使用方法

 3.代码分析

二、__call__方法

1.介绍

2.使用方法

3.代码分析 

总结



前言

本次就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方法比较简单,就是理解有些绕弯。

多举例,多总结,多走弯路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值