一个对象从创建到释放,这期间执行了那些操作,在python中的对象是如何被创建,又是什么时候在内存中被释放的其实都已经被设计好了,我们可以通过__new__()和__del__()方法进行验证。
class Cat:
def __init__(self): # 创建对象的时候执行这个方法,初始化方法为实例添加默认属性
print('初始化方法')
self.age = 19
def __del__(self): # 对象释放的时候调用这个方法,当对象被del删除时会自动调用这个方法
print('对象被释放了')
pass
c = Cat()
print(c)
返回结果:
初始化方法
<__main__.Cat object at 0x000000000217B460>
对象被释放了
从上面的结果可以看出来,输出对象之前调用初始化方法,结束之后使用del方法释放对象,再看看下面一段代码。
class Cat:
def __new__(cls, *args, **kwargs): # 对象创建之前就执行这个方法,拦截对象创建
print('拦截对象创建')
def __init__(self): # 创建对象的时候执行这个方法,初始化方法为实例添加默认属性
print('初始化方法')
self.age = 19
def __del__(self): # 对象释放的时候调用这个方法,当对象被del删除时会自动调用这个方法
print('对象被释放了')
pass
c = Cat()
print(c)
返回结果:
拦截对象创建
None
通过给对象加一个__new__()方法之后发现对象根本没有被创建,这是因为在对象创建之前就执行这个方法,拦截对象创建。所以一个对象的创建首先要执行__new__()方法,生命周期结束后执行__del__()方法,这就是一个对象的完整生命周期。