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