Я нахожу шаблон удаления объекта для python.
Я нашел какой-то шаблон и написал этот тестовый код;
class test:
def __init__(self, *args, **kwargs):
print("test.__init__(self, *args={}, **kwargs={})".format(args, kwargs))
def __enter__(self, *args, **kwargs):
print("test.__enter__(self, *args={}, **kwargs={})".format(args, kwargs))
def __exit__(self, *args, **kwargs):
print("test.__exit__(self, *args={}, **kwargs={})".format(args, kwargs))
def __del__(self, *args, **kwargs):
print("test.__del__(self, *args={}, **kwargs={})".format(args, kwargs))
def example(self, *args, **kwargs):
print("test.example(self, *args={}, **kwargs={}".format(args, kwargs))
if("error" in kwargs):
raise Exception(kwargs["error"])
Я пробую этот метод истинного вызова __del__
.
t = test()
t.example(1, 2, 3, message="test")
t = None
результат;
test.__init__(self, *args=(), **kwargs={})
test.example(self, *args=(1, 2, 3), **kwargs={'message': 'test'})
test.__del__(self, *args=(), **kwargs={}) ## Ok. I can see calling __del__ method
Но этот тест после не вызывает __del__
t = test()
t.example(1, 2, 3, error="some error")
t = None
результат;
test.__init__(self, *args=(), **kwargs={})
t.example(1, 2, 3, error="some error")
test.example(self, *args=(1, 2, 3), **kwargs={'error': 'some error'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 13, in example
Exception: some error
t = None
# Opss ! Not calling __del__ method
Если какая-то ошибка возникла после того, как не позвонил __del___
Почему?