誰かのコードでこれを見ました。これはどういう意味ですか?
def __enter__(self):
return self
def __exit__(self, type, value, tb):
self.stream.close()
完全なコードはこちらです。
from __future__ import with_statement#for python2.5
class a(object):
def __enter__(self):
print 'sss'
return 'sss111'
def __exit__(self ,type, value, traceback):
print 'ok'
return False
with a() as s:
print s
print s
ベストアンサー1
これらのマジックメソッド ( __enter__
、__exit__
) を使用すると、ステートメントで簡単に使用できるオブジェクトを実装できますwith
。
そのアイデアは、何らかの「クリーンダウン」コードの実行を必要とするコードを簡単に構築できるようにすることです (try-finally
ブロックとして考えてください)。詳しい説明はこちら。
役に立つ例としては、データベース接続オブジェクトが挙げられます (対応する 'with' ステートメントがスコープ外になると、自動的に接続が閉じられます)。
class DatabaseConnection(object):
def __enter__(self):
# make a database connection and return it
...
return self.dbconn
def __exit__(self, exc_type, exc_val, exc_tb):
# make sure the dbconnection gets closed
self.dbconn.close()
...
上記で説明したように、このオブジェクトをステートメントで使用します( Python 2.5 を使用している場合は、ファイルの先頭でwith
実行する必要がある場合があります)。from __future__ import with_statement
with DatabaseConnection() as mydbconn:
# do stuff
PEP343 -- 'with' ステートメント素晴らしい記事もあります。