python: 调用父class的递归函数

python: call a parent class' recursive function

我不太明白下面的结果:

class A:
    def a(self, i):
        if i <= 0:
            return
        print("A", i)
        self.a(i - 1)  # line 6


class B(A):
    def a(self, i):
        print("B", i)
        super().a(i)   # line 12


if __name__ == '__main__':
    b = B()
    b.a(3)

结果是:

B 3
A 3
B 2
A 2
B 1
A 1
B 0

在第12行,它调用父class A的函数,但是当a()递归调用自身时,它使用B的版本。为什么会这样?

如何得到如下结果(我还是想重写父函数a()):

B 3
A 3
A 2
A 1

我想强制实例只使用父版本中的函数。

我有这个需求是因为我在一些实际问题中遇到了类似的问题。我仍然必须将函数命名为 a in class B。然而,大部分逻辑在 A 中是重复的,我想重用它。

现在我只能用下面的方式来实现B:

class B(A):
    def a(self, i):
        print("B", i)
        self.a_helper(i) 

    def a_helper(self, i):
        if i <= 0:
            return
        print("A", i)
        self.a_helper(i - 1) 

作为普通函数直接调用方法,而不是通过实例。

class A:
    def a(self, i):
        if i <= 0:
            return
        print("A", i)
        A.a(self, i - 1)  # line 6