【发布时间】:2018-09-09 18:42:44
【问题描述】:
我正在尝试在 python 3 中创建一个与“with”语句一起使用的类,但在“with”语句中我无法访问对象或方法。 例如,运行以下代码:
class Openizer:
def __init__(self, something):
self._something = something
def __enter__(self):
print('entered')
def __exit__(self, exc_type, exc_value, traceback):
print('exited')
def print_something(self):
print(self._something)
with Openizer('something') as op:
op.print_something()
引发以下异常:
Traceback (most recent call last):
File "openizer.py", line 16, in <module>
op.print_something()
AttributeError: 'NoneType' object has no attribute 'print_something'
如果我尝试打印(操作)它会打印“无”。这是为什么?我使用 with 语句错了吗?什么是正确的方法?是否可以使用“with”语句实例化一个类,并在“with”语句中调用实例化对象的方法?
考虑 open() 函数,它实例化了一个可以读取或写入的文件对象,我想做类似的事情。
【问题讨论】:
-
你必须在
__enter__方法中return self。 -
你永远不会在你的
__enter__方法中返回任何东西,所以它隐式返回None
标签: python python-3.x methods with-statement