python - 调用 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)但似乎我们不应该有任何递归问题。
提前致谢!!!
解决方案
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()
推荐阅读
- angularjs - 点在 angularjs 的 D3 图上持续存在
- swift - 如何解决使用分支和边界方法的问题?
- installation - 在 CentOS 7.1 上安装 ajenti-v-mail 时收到错误
- xamarin - 如何在 VideoView 中的 SeekTo() 方法后恢复视频?
- npm - 使用 vue-material 的 vue 项目中的依赖错误
- android - 如何将选项卡侦听器添加到选项卡
- java - module-info.class 文件在module jar 文件和编译后的module-info.class 文件不同
- python - 如何部分重新加入解析的 URL?
- c# - 升级角色
- html - 找到正确实施的方法
此布局中的标记