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

时间:2019-06-27 18:12:43

标签: python python-3.x

假设我有这两类:

<div v-for="prod in products.values()" :key="prod.id">

这将打印:

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! 的{​​{1}}方法中的B的{​​{1}}方法中的代码执行?

类似的东西:

foo

这样输出将是:

A

编辑:为澄清起见,我试图避免检查foo的{​​{1}}方法中返回的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()

2 个答案:

答案 0 :(得分:3)

您可以从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!")

对您有用吗?

答案 1 :(得分:1)

您的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!")

对您有用吗?