我试图在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'
如果我尝试打印(op),它将打印“无”。这是为什么?我使用with语句错误吗?正确的方法是什么?是否可以使用“ with”语句实例化一个类,并在“ with”语句内部调用实例化对象的方法?
考虑open()函数,它实例化了一个文件对象,该对象可以读取或写入,我想做类似的事情。
答案 0 :(得分:0)
__enter__()
应该返回self
。从__enter__
返回的所有内容都将转到as
子句。