我如何将 Contextmanager 用于实例变量?例如,假设我有一些Connection
课程,必须在销毁时关闭。如果我要将它实现为 ContextManager,我可以做到。
with Connection() as c:
c.write('FOO')
c.ask('BAR?')
它会在销毁时自动关闭。但是如果我想在__init__
另一个类中使用它,例如下面的例子呢?
class Device(object):
def __init__(self):
self.connection = Connection() # Must be closed on destruction.
我不希望它在构造函数退出时关闭,它应该在对象被销毁时死掉。我可以使用__del__
,但这有它的缺点。习惯于 C++ 中的 RAII 让我感到困惑。
那么在这种情况下最好的方法是什么?