如何使 python class 成为上下文管理器
How to make a python class a context manager
我这样定义 class:
class Simple():
def __init__(self):
self.string = "Hello World"
def __enter__(self):
pass
def __exit__(self):
pass
并这样称呼它:
with Simple() as simple_test:
print(simple_test.string)
我收到以下错误:
print(simple_test.string)
AttributeError: 'NoneType' object has no attribute 'string'
为什么我的 class None
?
__enter__
方法必须returnself
:
def __enter__(self):
return self
__enter__
应该 return 您想要在 as
子句中绑定的任何内容,请参阅 python docs.
因为你的 __enter__
没有 return 任何东西,绑定到 simple_test
的值是 None
。
我想你想要这个:
class Simple():
def __init__(self):
self.string = "Hello World"
def __enter__(self):
return self
def __exit__(self):
pass
我这样定义 class:
class Simple():
def __init__(self):
self.string = "Hello World"
def __enter__(self):
pass
def __exit__(self):
pass
并这样称呼它:
with Simple() as simple_test:
print(simple_test.string)
我收到以下错误:
print(simple_test.string)
AttributeError: 'NoneType' object has no attribute 'string'
为什么我的 class None
?
__enter__
方法必须returnself
:
def __enter__(self):
return self
__enter__
应该 return 您想要在 as
子句中绑定的任何内容,请参阅 python docs.
因为你的 __enter__
没有 return 任何东西,绑定到 simple_test
的值是 None
。
我想你想要这个:
class Simple():
def __init__(self):
self.string = "Hello World"
def __enter__(self):
return self
def __exit__(self):
pass