Python 调用祖父类方法会导致递归错误(超过最大递归深度)

Python 调用祖父类方法会导致递归错误(超过最大递归深度),python,recursion,inheritance,Python,Recursion,Inheritance,我试图调用一个祖父方法,并得到以下错误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(se

我试图调用一个祖父方法,并得到以下错误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
为什么呢

我试着看这个:但似乎我们不应该有任何递归问题

提前感谢

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

以下是在上述情况下发生的情况:

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()
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()