Pythonクラスではメソッドがファイルをオープンしましたが、ファイルオブジェクトを実際に使用する別のメソッドです。だから私は書く:with ... fromのステートメントをself.barに割り当てる
def first_method(self):
with open(FILE) as f:
self.output = f
self.another_method()
def another_method(self):
self.output.write(DATA)
ご覧のとおり、another_method
がwith ... as
範囲にfirst_method
によって呼び出されるので、私はanother_method
がwith ... as
スコープを終了first_method
前に行われることを確信しているされて - それは動作します。しかし、私はこのラインについて困惑してる:
self.output = f
は、別の関数でwith ... as
のステートメントからの結果を使用することをお勧めしますか?これは予期せぬ動作や制御不能な動作につながりますか?
そして、another_method
は、f
が使用される唯一の場所ではありません。実際には、another_method
はコルーチンで、多くはf
に非同期で書き込みます。だから私はanother_method
以外のファイルを開く必要があります。
aiohttp.ClientSession
,tqdm.tqdm
のように、同じ問題に直面している他の多くのコンテキストマネージャがあります。それらをパラメータとして渡すと、パラメータが多すぎます。
実際には、thisと書くと問題が発生します。
@ PM2Ringありがとう、私は質問を編集しました。 – CSM