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__。