在 Python 中,是否有任何方法可以从其父 class 调用子 class 的方法覆盖?

In Python, is there any way to call a child class's method override from its parent class?

我正在尝试重新自学 Python 并找出具体的细节、提示和技巧,以及围绕抽象 classes 和多态性的常见约定。现在,我有一个 class 层次结构,如下所示:

from abc import ABC, abstractmethod


class A(ABC):

    @abstractmethod
    def x(self):
        pass

    def do_x_ten_times(self):
        for i in range(10):
            x()


class B(A):

    def x(self):
        print("Hello World")


class C(A):

    def x(self):
        print("Hello Whosebug")



b = B()
b.x()

c = C()
c.x()

b.do_x_ten_times()

我的想法是 do_x_ten_times() 在两个子classes B[=31 中将是完全相同的代码=] 和 C。因此,如果我可以将 do_x_ten_times() 的代码放在 A,并让 A 调用任何 subclass 的 x() 实现。不幸的是,我得到 "NameError: name 'x' is not defined."

我知道为什么做这样的事情可能不是典型的,我的直觉说它可能违反了多态性的某些规则。如果我真的需要,我可以将 do_x_ten_times() 复制粘贴到 classes BC,并在A中抽象化。但我想知道是否有任何合理的方法可以避免重复这段代码。

您需要在 A.do_x_ten_times()

中调用 self.x()
from abc import ABC, abstractmethod


class A(ABC):

    @abstractmethod
    def x(self):
        raise NotImplementedError

    def do_x_ten_times(self):
        for i in range(10):
            self.x()        # <-- self will refer to the calling instance
                            #     implementation of x(self)


class B(A):

    def x(self):
        print("Hello World")


class C(A):

    def x(self):
        print("Hello Whosebug")



b = B()
b.x()

c = C()
c.x()

b.do_x_ten_times()