python - 应该从python中的子类调用__exit__父类(super class)方法

标签 python subclass exit superclass

我不确定为什么我突然想到了这一点,但如果我有一个上下文管理器兼容类,它是另一个上下文管理器类的子类,如下所示。我已经展示了 __exit__ 调用 close() 的“典型”模型。我的问题是:bar.__exit__() 应该显式调用 super(bar,self).__exit__(args) 还是 bar 的 close() 应该调用 foo 的 close 还是???在这种情况下,这里推荐的模型是什么?

class foo(object):
    def __enter__(self):
        pass
    def __exit__(self,*exc_info):
        self.close()
        return False
    def close(self):
      pass
class bar(foo):
    def __enter__(self):
        pass
    def __exit__(self,*exc_info):
        self.close()
        return False
    def close(self):
        super(bar,self).close()   # is this the recommend model?

谢谢。

最佳答案

因为在一般情况下可能无法知道 __exit__ 方法的作用,所以我将使用相同的参数调用它;如果我想抛出一个异常,那么在它的 __exit__ 中给它那个异常,然后在异常返回后引发它……但总的来说这听起来有点老套;更好的方法可能是您要么不覆盖 __exit__ 而是覆盖 close 方法(依赖于它无论如何都会被父类(super class)调用的事实);如果这两个上下文管理器确实做了不同的事情,或者链接它们。

关于python - 应该从python中的子类调用__exit__父类(super class)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19011111/

相关文章:

python - 从应用程序调用时,CEFPython 将不会初始化

python - 使用 Pandas 创建精确的 date_time 范围

python - 如何使用 WTForms 插入条件字段?

ios - 可重用的 uiscrollview 类

Swift - 如何正确继承 NSMutableURLRequest?

c# - 从静态基类方法调用子类构造函数

python - python 解析器如何包含 "AT"文件(ini)

php - PHP中的die()和exit()有什么区别?

python - 从Python中的外部模块退出(信号处理)

java - System.exit(1) 在多线程程序中存在,返回码为 0