繁体   English   中英

阻止继承的方法从其超级方法内部运行

[英]Stop inherited method from running from inside it's super method

假设我有以下两个类:

class A():
  def foo():
    print("foo inside A!")

class B(A):
  def foo():
    super().foo()
    print("foo inside B!")

x = B()
x.foo()

这将打印:

foo inside A!
foo inside B!

有没有干净的方式,我可以放弃的代码在执行Bfoo方法从Afoo的方法?

就像是:

class A():
  def foo():
    print("foo inside A!")
    if some condition:
      <return from inherited method here>

class B(A):
  def foo():
    super().foo()
    print("foo inside B!")

x = B()
x.foo()

这样输出将是:

foo inside A!

编辑:只是为了澄清,我试图避免检查Bfoo方法中的super().foo()返回。

您可以从A.foo()引发一个异常, A.foo()其捕获到B.foo() ,并在except子句中进行一些工作。 可能是这样的:

class MyException(Exception):
    pass

class A:
    def foo(self):
        print("foo inside A!")

        if 'some condition':
            raise MyException

class B(A):
    def foo(self):
        try:
            super().foo()
        except MyException:
            print("foo inside B!")

那对你有用吗?

您的A.foo()方法可以返回您在B.foo()签入的值。 可能是这样的:

class A:
    def foo(self):
        print("foo inside A!")
        if 'some condition':
            return True
        else:
            return False

class B(A):
    def foo(self):
        val = super().foo()

        if val:
            print("foo inside B!")

那对你有用吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM