サイトアイコン たーちゃんの「ゼロよりはいくらかましな」

【python】withな処理をcontextmanagerで実装する

ファイルの読み込みやデータベースのセッション管理など、

withを使用しクローズを自動でおまかせするような処理を記述する際は、

contextmanagerがおすすめだよと教えてもらいました。

 

 

そのあたりを自分のメモとして記載。

 

 

contextmanager適用前のコード

class sample:

  def __enter__(self):
      print("with in")

  def __exit__(self, exc_type, exc_value, traceback):
      print("with out")

 

 

contextmanager適用前のコード

from contextlib import contextmanager

@contextmanager
def sample:
  print("with in")
  yield
  print("with out")

 

yieldの前後が、__enter__と__exit__となります。

もし__enter__でreturnするものがある場合は、

yield <return対象オブジェクト>

とすればOK

 

 


にほんブログ村


人気ブログランキング

モバイルバージョンを終了