python - 我对此python代码感到困惑
问题描述
以下 Python 代码显示:
i from B is : 24660
我认为它应该显示i from B is : 28770
为__init__
从父类调用该方法,super()
并且它应该从父类而不是子类运行该方法calc_i()
。
蟒蛇代码:
class A:
def __init__(self):
self.calc_i(411)
def calc_i(self,i):
self.i = 70 * i
class B(A):
def __init__(self):
super().__init__()
print("i from B is : " , self.i)
def calc_i(self,i):
self.i = 60 * i
b = B()
编辑:我想问pythoncalc_i()
从子类而不是父类运行方法的原因是什么。即使,super().__init__()
是从子类中调用的。
解决方案
这是多态性的一个属性。这里,B 类是从 A 类继承的子类。当你对 A 类进行 super 回调时,它会调用calc_i(self, i)
,但是calc_i(self,i)
已经被 B 类中的定义覆盖,因此它给出了 24660。
这就是多态性在许多编程语言中的工作原理。你会在 AP 计算机科学考试中看到与此相关的问题。
推荐阅读
- python - 运行 conda update 后,Anaconda 提示消失了
- python-3.x - 替换文件夹中所有文件中的字符串
- html - 响应式 svg 内容
- arrays - 如何从两个数组中选择元素,以使总和之间的差异最小
- reactjs - 类型错误:通过 API 映射时无法读取未定义
- scala - 如何使用 py4j 将 Scala HashSet 转换为 Python 集?
- java - 让用户有第二次机会输入正确的数字“99”
- c++ - 通知 Windows 系统应用程序字体已被卸载/删除
- java - 使用分隔符“;”读取和拆分文本文件 但忽略“,”
- c - 我正在编写一个执行线程同步的小型 c 程序