При попытке понять некоторые концепции 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
@ Kris Вид. Однако нет никакой гарантии, что '__del__' будет вызван для экземпляров, которые все еще живут, когда переводчик завершает работу. – chepner