试图找出'with..as'结构如何在python中工作

时间:2014-04-26 16:18:38

标签: python

我正在尝试学习python并且我登陆了

  

with..as

构造,使用如下:

with open("somefile.txt", 'rt') as file:
    print(file.read()) 
    # at the end of execution file.close() is called automatically.

因此,作为学习策略,我尝试执行以下操作:

class Derived():

    def __enter__(self):
        print('__enter__')

    def __exit__(self, exc_type, exc_value, traceback):
        print('__exit__')

with  Derived() as derived:
    print(derived)

我得到了这个输出:

__enter__
None
__exit__

我的问题是:

  • 为什么print(derived)会返回None个对象而不是Derived个对象?

1 个答案:

答案 0 :(得分:17)

名称derived绑定到__enter__方法返回的对象,即None。尝试:

def __enter__(self):
    print('__enter__')
    return self

Docs:

  

object.__enter__(self)

     

输入与此对象相关的运行时上下文。 with语句将此方法的返回值绑定到语句的as子句中指定的目标(如果有)。