私はStringIO
がファイルオブジェクトのように振る舞い、open('somefile.txt')
から得ることをダックタイピングすることを理解しています。with文で使用できるPythonクラスを定義するにはどうすればよいですか?
今、私はwith
文でStringIO
を使用したい:
with StringIO('some string') as fh: # fh as in "file handle"
data = [stuff from stuff in fh.read()]
しかし、PythonはタイプStringIO
が__exit__
メソッドを持っていないと文句を言い。 StringIO
をサブクラス化した後:
class MyStringIO(StringIO):
def __exit__(self):
self.close()
私は今__enter__
メソッドを持っていないについての例外を取得します。 __enter__
メソッドを定義するにはどうすればよいですか? with
ステートメントで使用できるクラスからPythonに何が期待されていますか?
私はcontextlib.closingを使って例を書いていましたが、あなたはそれを打ち負かしました.. – DSM
あなたの場合(オブジェクトを閉じたいだけです)、 'contextlibを使う方が簡単かもしれません。閉鎖する。 –
@ DSM:Lol ...あなたはcontextlib.closingに関するコメントに私を打つ:D –