首页 > 解决方案 > 我对此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__()是从子类中调用的。

标签: pythonpython-3.xinheritancesuperself

解决方案


这是多态性的一个属性。这里,B 类是从 A 类继承的子类。当你对 A 类进行 super 回调时,它会调用calc_i(self, i),但是calc_i(self,i)已经被 B 类中的定义覆盖,因此它给出了 24660。

这就是多态性在许多编程语言中的工作原理。你会在 AP 计算机科学考试中看到与此相关的问题。


推荐阅读