13

私は何かを理解していないようです---pythonwithステートメント。

このクラスを考えてみましょう:

class test(object):
    def __enter__(self): pass
    def __exit__(self, *ignored): pass

今、withのようにそれを使用する場合

with test() as michael:
    print repr(michael)

<test instance at memore blah> のような出力が期待できます。しかし、私はNoneを取得します。

ここで何か問題がありますか?どんな提案も役に立ちます。

(私は Python 2.6.6 を使用しています。)

編集:

ドキュメントを教えてくれたephementに感謝し ます。__enter__メソッドは次のように読む必要があります

    def __enter__(self): return self
4

3 に答える 3

19

withドキュメントから:

ターゲットがwithステートメントに含まれていた場合、からの戻り値__enter__()がそれに割り当てられます。

の場合def __enter__(self): return self、期待される出力が生成されます。

于 2011-01-29T07:03:25.657 に答える
2

ドキュメントから:

object.__enter__(self)

このオブジェクトに関連するランタイム コンテキストを入力します。ステートメントは、このwithメソッドの戻り値をas、ステートメントの句で指定されたターゲットにバインドします (存在する場合)。

于 2011-01-29T07:03:55.767 に答える
-1

私は同じことを得るrepr(michael)

代わりにこれを試してください:

m.__repr__()

完全にはわかりませんが、クラスでreprメソッドを定義していないという事実と関係があると思いますtest

于 2011-01-29T07:06:40.763 に答える