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 ”对象没有属性“方法”

(我的重点)

于 2013-05-14T01:39:05.630 回答
5

问题是您的__enter__方法没有返回self

于 2013-05-14T01:38:22.407 回答