Pythonのステートメントを試してwithいますが、次のコードリストでは、__init__メソッドが2回呼び出され、__exit__メソッドが1回呼び出されることがわかりました。これはおそらく、このコードが何か有用なことをした場合、リソースリークが発生することを意味します。
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これは、ステートメントで何か間違ったことをしていて、コンストラクターを手動で効果的に呼び出しているためだと思います。これを修正するにはどうすればよいですか?