在课堂上发表声明

时间:2013-05-14 01:36:19

标签: python with-statement

{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'

无法找到方法?

2 个答案:

答案 0 :(得分:8)

__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'

(我的重点)

答案 1 :(得分:5)

问题是您的__enter__方法未返回self