首页 > 解决方案 > 调用 Grandfather 类方法导致 RecursionError(超出最大递归深度)

问题描述

我试图调用祖父方法并收到以下错误(RecursionError):

class GrandParent:
    def get_data(self):
        return 5


class Parent(GrandParent):
    def get_data(self):
        return super(self.__class__, self).get_data()


class Child(Parent):
    def get_other_data(self):
        d = self.get_data()
        print(d)
        return d


demo = Child()
res = demo.get_other_data()
print('done')

我收到以下错误:

RecursionError: maximum recursion depth exceeded while calling a Python object

这是为什么?

我试着看看这个:RecursionError: maximum recursion depth exceeded while calling a Python object(Algorithmic Change Required)但似乎我们不应该有任何递归问题。

提前致谢!!!

标签: pythonrecursioninheritance

解决方案


self是动态绑定的,这意味着它具有实际创建对象的类型,在本例中为Child.

以下是上述案例中发生的情况:

class Parent(GrandParent):
    def get_data(self):
        return super(self.__class__, self).get_data()

评估为

class Parent(GrandParent):
    def get_data(self):
        return super(Child, self).get_data()

这是

class Parent(GrandParent):
    def get_data(self):
        return Parent.get_data(self)

您现在可以看到为什么这是一个无休止的递归。


Python 2.7 最佳实践:

class Parent(GrandParent):
    def get_data(self):
        return super(Parent, self).get_data()

Python 3+:

class Parent(GrandParent):
    def get_data(self):
        return super().get_data()

推荐阅读