Pythonの「With with」ステートメントターゲットは予想外にありません
-
27-10-2019 - |
質問
私は何かを理解していないようです---パイソン with
声明。
このクラスを考えてみましょう:
class test(object):
def __enter__(self): pass
def __exit__(self, *ignored): pass
今、それを使用するとき with
, 、 のように
with test() as michael:
print repr(michael)
ような出力を期待するでしょう u003Ctest instance at memore blah>. 。しかし、私は得ます なし.
ここで何か問題がありますか?どんな提案にも役立ちます。
(私はPython 2.6.6を使用しています。)
編集:
ありがとうエフェメント ドキュメントを指摘してくれて。 __enter__
メソッドを読み取る必要があります
def __enter__(self): return self
解決
から with
ドキュメンテーション:
ターゲットが含まれている場合
with
声明、からの返品値__enter__()
それに割り当てられます。
もし、あんたが def __enter__(self): return self
, 、予想される出力が生成されます。
他のヒント
から ドキュメント:
object.__enter__(self)
このオブジェクトに関連するランタイムコンテキストを入力します。
with
ステートメントは、この方法の返品値を、で指定されたターゲットにバインドしますas
声明の条項(ある場合)。
同じことができます repr(michael)
代わりにこれを試してください:
m.__repr__()
私は完全に確信していませんが、あなたが定義していないという事実と関係があると思います repr
あなたの方法 test
クラス
所属していません StackOverflow