Weh*_*olt 13 python with-statement
为什么这不起作用:
class X:
var1 = 1
def __enter__(self): pass
def __exit__(self, type, value, traceback): pass
with X() as z:
print z.var1
Run Code Online (Sandbox Code Playgroud)
我明白了:
print z.var1
AttributeError: 'NoneType' object has no attribute 'var1'
Run Code Online (Sandbox Code Playgroud)
Sve*_*ach 23
将定义更改X为
class X(object):
var1 = 1
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
pass
Run Code Online (Sandbox Code Playgroud)
with将方法的返回值赋给__enter__()后面的名称as.你的__enter__()退回None,被分配给z.
我还将类更改为新类(这对于使其工作并不重要).
请参阅上下文管理器文档:
__enter__( )输入运行时上下文,然后返回该对象或与运行时上下文相关的另一个对象。使用此上下文管理器,此方法返回的值绑定到with语句的as子句中的标识符。返回自身的上下文管理器的一个示例是文件对象。文件对象从中返回,__enter__()从而可以open()在with语句中用作上下文表达式。返回相关对象的上下文管理器的一个示例是所返回的对象
decimal.Context.get_manager()。这些管理器将活动的十进制上下文设置为原始十进制上下文的副本,然后返回该副本。这允许对with语句主体中的当前十进制上下文进行更改,而不会影响with语句之外的代码。
您的__enter__方法不返回任何内容,与returning相同None。
| 归档时间: |
|
| 查看次数: |
18541 次 |
| 最近记录: |