如何使 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