Я экспериментирую с операторами Python with
и обнаружил, что в следующем листинге кода мой метод __init__
вызывается дважды, а метод __exit__
вызывается один раз. Это, вероятно, означает, что произойдет утечка ресурсов, если этот код сделает что-нибудь полезное.
class MyResource:
def __enter__(self):
print 'Entering MyResource'
return MyResource()
def __exit__(self, exc_type, exc_value, traceback):
print 'Cleaning up MyResource'
def __init__(self):
print 'Constructing MyResource'
def some_function(self):
print 'Some function'
def main():
with MyResource() as r:
r.some_function()
if __name__=='__main__':
main()
Это вывод программы:
Constructing MyResource
Entering MyResource
Constructing MyResource
Some function
Cleaning up MyResource
Я предполагаю, что это потому, что я делаю что-то не так в операторе with
, фактически вызывая конструктор вручную. Как мне исправить это?