如何在覆盖方法时调用它

How to call a method while overriding it

我有以下 class 层次结构:

    class AbstractClass(object):
        __metaclass__ = ABCMeta

        @abstractmethod
        def foo(self):
            pass

    class A(AbstractClass):
        def __init__():
            super().__init__()

        def foo(self):
            //Logic

    class B(A):
        def __init__():
            super().__init__()

我想使用在 A 中实现的 foo,所以我不能在 B 中覆盖它。 使用 B.foo() 有效,但我仍然收到来自 PyCharm:

的警告

"Class B must implement all abstract methods"

我是否必须重写一个已经重写了抽象方法的方法?如何在不丢失实现的情况下覆盖它?只需将方法复制到子 class?

我正要问这个问题,突然想到它是如何工作的。我以为 "how I can call a method after I just overrode it?" 想了想终于想通了。

从父类 class 调用被覆盖的方法,同时在子类 class 中覆盖它:

class B(A):
    def __init__():
        super().__init__()

    def foo(self):
        super().foo()

之所以可行,是因为超类型方法必须与其子类型一起使用,而无需提供进一步的实现。在我弄清楚之后,它看起来很合乎逻辑。

这可能对刚刚了解继承如何工作的人有用。