我在Python 3.8中有两个类:A和B,其中B继承自A,两个类都有一个具有相同名称的方法,因此,类B的方法将覆盖类A的方法,B中的方法具有参数加。
B中的函数递归调用 super ().method(条件),而A中的函数递归调用self.method(条件),我期望的结果是当我执行 super时B中的()。method(条件),然后A中的 self .method(条件),再次执行类A的方法,但是获得的结果是,它试图执行B中的方法,因为缺少参数而引发错误。 这是代码:
class A():
def method(self, condition):
if condition:
print('from A')
else:
self.method(True)
class B(A):
def method(self, condition, other):
if condition:
print('from B')
else:
super().method(False)
b = B()
b.method(False, 0)
这是错误:
TypeError:method()缺少1个必需的位置参数:“其他”
答案 0 :(得分:0)
请参阅上面的评论。最简单的解决方案是创建一个私有方法,因此不会造成混淆。
class A():
def __method(self, condition):
if condition:
print('from A')
else:
self.__method(True)
def method(self, condition):
self.__method(condition)