【发布时间】:2016-08-27 06:09:01
【问题描述】:
在尝试理解一些 Python 概念时,我遇到了以下问题:
class A:
def __init__(self, x):
self.x = x
def __del__(self):
print("del")
a1 = A()
输出:
$ python test.py
del
Traceback (most recent call last):
File "testdest.py", line 9, in <module>
a1 = A()
TypeError: __init__() takes exactly 2 arguments (1 given)
错误很明显(实例化时缺少参数),但我想知道为什么在有实例之前调用析构函数?
除非在尝试实例化时,Python 会在调用构造函数之前创建一种实例,并且需要在最后清理?
既然self 被传递给构造函数,我可以假设这个self 是实例吗?确实如此,那么在调用构造函数的时候实例已经存在了,是吗?
这是可能取决于当前实现的垃圾收集器的行为吗?
【问题讨论】:
-
我可能是错的,但我通常认为
__del__类似于finally子句,即“无论如何”都会执行的东西。 -
@Kris 有点像。但是,不能保证
__del__在解释器退出时仍会被调用。
标签: python-3.x garbage-collection destructor instantiation