我对这段python代码感到困惑

我对这段python代码感到困惑,python,python-3.x,inheritance,super,self,Python,Python 3.x,Inheritance,Super,Self,以下Python代码显示: i from B is : 24660 我认为它应该显示B is:28770中的I,因为使用super()从父类调用\uuu init\uuu方法,它应该从父类而不是子类运行方法calc\u I() Python代码: class A: def __init__(self): self.calc_i(411) def calc_i(self,i): self.i = 70 * i

以下Python代码显示:

i from B is :  24660

我认为它应该显示B is:28770中的
I,因为使用
super()
从父类调用
\uuu init\uuu
方法,它应该从父类而不是子类运行方法
calc\u I()

Python代码:

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

编辑:我试图问python从子类而不是父类运行
calc_I()
方法的原因是什么。尽管如此,
super()。\uuuu init\uuuu()
是从子类调用的。

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


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

“它应该从父类运行该方法。”不,不应该。b的
self
b
原因的一个实例?这就是我想问的!“它应该以父类而不是子类的形式运行方法
calc_i()
”—正如您在示例代码中看到的,Python认为不是这样,那么问题是什么?“原因?”—如果这是您想要问的,那么将其放入您的问题中。