如何在with语句中访问对象的方法?

时间:2018-09-09 18:42:45

标签: python python-3.x methods with-statement

我试图在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()函数,它实例化了一个文件对象,该对象可以读取或写入,我想做类似的事情。

1 个答案:

答案 0 :(得分:0)

__enter__()应该返回self。从__enter__返回的所有内容都将转到as子句。