Python中的递归,多态和继承混乱

时间:2020-10-27 02:59:01

标签: python recursion inheritance polymorphism

我在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个必需的位置参数:“其他”

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)