Python-浅谈__del__方法

class Person(object):

    def __init__(self, name):
        print('__init__')
        self.__name = name

    def __del__(self):
        print("__del__")
        print("删除了{}...".format(self.__name))

P=Person('柴犬')

>>>__init__
__del__
删除了柴犬...

Python中,当实例对象被删除时会执行__del__方法。但其实,__del__并不具有删除实例的功能。我们可以简单的测试一下:

我们复写创建实例的功能__new__。继承object的__new__方法(用来创建实例)但是不给对象来接收这个实例,当我们创建实例时就会在创建完该实例后直接清理掉这个实例的内存,此时执行__del__方法(来打印’__del__‘)然后接着执行__new__方法的后续代码。因此输出如下:

class Person(object):
    def __new__(cls, *args, **kwargs):
        super().__new__(cls)
        print('在吗')

    def __init__(self, name):
        print('__init__')
        self.name = name

    def __del__(self):
        print("__del__")
        print("删除了")

p=Person('柴犬')
>>>__del__
>>>删除了
>>>在吗

 

还有一种del方法,实际上是删除的实例的引用而不是实例。我们可以简单的测试一下:

p=Person()
p1=p

del p
#没有执行__del__
del p1
#执行了__del__

当实例p被创建出来,并赋值给p1后。del p,并没有执行__del__说明该实例仍在。之后再次del p1后才执行__del__。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值