如何将“with-useful”对象包装到类中?

时间:2017-10-22 13:43:58

标签: python encapsulation with-statement

假设我们有一个对象,它旨在与with一起使用:

with somefunction() as f:
   ...
   f.somemethod()

现在我想在类中使用它,使对象可用于类实例的完整生命周期。

在构造函数中我会写

class MyClass:
   def __init__(self):
      self.f = somefunction().__enter__()

我应该在哪里拨打__exit__()呢?

1 个答案:

答案 0 :(得分:0)

如果somefunction是一个对象,首先我们可以将其命名为someobject并执行以下操作:

class MyClass(object):

    def __init__(self, someobject):
        self._someobject = someobject


    def dothing(self):
        with self._someobject() as so:
            so.somemethod()


myinstance = MyClass(someobject)
myinstance.dothing()