Python の '__enter__' と '__exit__' の説明 質問する

Python の '__enter__' と '__exit__' の説明 質問する

誰かのコードでこれを見ました。これはどういう意味ですか?

    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' ステートメント素晴らしい記事もあります。

おすすめ記事