例如,我有这样的代码:
with MyClass() as x:
print 'I have only {0}'.format(x)
with MyClass() as y:
print 'I have {0} and {1}'.format(x, y)
print 'Again only {0}'.format(x)
x
and y
两者都应该在相应的退出后取消初始化with
块。还x
and y
不是以下实例MyClass
.
__exit__
只有三个参数,每个参数都是 None (如果没有提供例外)。
我怎样才能确定__exit__
哪个块刚刚退出以及返回了什么值__enter__
?
(注意代码应该是线程安全的)。
Example:
class MyClass(object):
def __enter__(self):
if moon_phase > 0:
return 123
else:
return 456
def __exit__(self):
number = what_was_returned_by_enter()
print 'End of block with', number
with MyClass() as x:
print x # 123
with MyClass() as y:
print x, 'and', y # 123 and 456
# printed "End of block with 456"
print x # 123
# printed "End of block with 123"
由于您有一个处理上下文的自定义类,self
将是上下文管理器实例。
您需要检查其状态(存储在__init__()
创建时间或何时__enter__()
被调用)来确定您刚刚退出的是哪一个。
下面的例子存储了返回值__enter__
在实例上,以便您可以在以下情况下再次检索它:__exit__
正在被调用:
class MyClass(object):
def __enter__(self):
if moon_phase > 0:
self.returnval = 123
else:
self.returnval = 456
return self.returnval
def __exit__(self, *args):
number = self.returnval
print 'End of block with', number
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)