微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有使用 with 语句包装类的pythonic方法?

如何解决是否有使用 with 语句包装类的pythonic方法?

我做了以下操作,它有效,但我怀疑它的稳健性。

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_tb)

我知道方法 B.__enter__()B.__exit__() 不应该在 B 之外使用,但我没有找到其他方法来做到这一点。 以这种方式包装一个类是否可以接受? 还有别的方法吗?

我知道答案可能是:“不,这正是 with 旨在防止的”

解决方法

“methods B.__enter__() and B.__exit__() should not be used outside B”这句话是为了教新手程序员如何正确使用with语句。

但是,您正在实施它。你正在做的事情是完全可以接受和正确的。事实上,我也不知道有什么更好的方法。

,

这个问题实际上可以通过使用子类而不是包装器来解决(谢谢@tripleee) 我忽略了这个选项,因为必须根据子类参数对父类进行不同的实例化。但这可以按如下方式完成:

import B

class A(B):
    def __init__(self,parameter):
        if parameter == 1:
            super().__init__(x=1)
        elif parameter == 2:
            super().__init__(y=2,z=3)
        else:
            raise ValueError

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。