I find object dispose pattern for python.
I found some pattern and write this test code;
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"])
I try this true call __del__
method.
t = test()
t.example(1, 2, 3, message="test")
t = None
result;
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
But this test after not call __del__
t = test()
t.example(1, 2, 3, error="some error")
t = None
result;
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
If some error raised after not calling __del___
Why ?