4
{class foo(object):
    def __enter__ (self):
        print("Enter")
    def __exit__(self,type,value,traceback):
        print("Exit")
    def method(self):
        print("Method")
with foo() as instant:
    instant.method()}

この py ファイルを実行すると、コンソールに次のメッセージが表示されます。

Enter
Exit

instant.method()
AttributeError: 'NoneType' object has no attribute 'method'

メソッドが見つかりませんか?

4

2 に答える 2

10

__enter__返す必要がありselfます:

class foo(object):
    def __enter__ (self):
        print("Enter")
        return self
    def __exit__(self,type,value,traceback):
        print("Exit")
    def method(self):
        print("Method")
with foo() as instant:
    instant.method()

収量

Enter
Method
Exit

__enter__が返されない場合は、デフォルトselfで返さNoneれます。したがって、instant値が割り当てられますNone。これがエラーメッセージが表示される理由です

' NoneType ' オブジェクトには属性 'method' がありません

(私の強調)

于 2013-05-14T01:39:05.630 に答える
5

問題は、__enter__メソッドが を返さないことselfです。

于 2013-05-14T01:38:22.407 に答える