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
我不太明白下面的结果:
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