【发布时间】:2021-05-05 08:05:44
【问题描述】:
我做了以下,它有效,但我怀疑它的稳健性。
import B
class A():
def __init__(self):
self._b = B()
def __enter__(self):
return self._b .__enter__()
def __exit__(self, exc_type, exc_val, exc_tb):
return self._b .__exit__(exc_type, exc_val, exc_tb)
我知道 B.__enter__() 和 B.__exit__() 方法不应该在 B 之外使用,但我没有找到其他方法来做到这一点。
以这种方式包装一个类是否可以接受?
还有其他方法吗?
我知道答案可能是:“不,这正是 with 旨在防止的”
【问题讨论】:
-
单独来看,如果 A 是 B 的子类,这将是优雅而明显的。
-
这个包装类的用例是什么?为什么需要它?
-
这对于实现上下文管理器来说是非常好的。不过,根据您想要做的事情,
contextlib.contextmanager可能会为您做这件事。 -
@azro,不,我没有看到关于在那里包装的信息
-
blhsing,我需要根据 A 类上的参数不同地实例化 B 类 @tripleee,由于上述原因,我首先忽略了这个选项,但我们实际上可以调用 supper().__init__ () 具有不同的参数,具体取决于我所做的 A 收到的内容并且它有效,我会就此写一个答案,谢谢
标签: python wrapper with-statement