質問

私は何かを理解していないようです---パイソン 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 クラス

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top