我对这段python代码感到困惑
以下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
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认为不是这样,那么问题是什么?“原因?”—如果这是您想要问的,那么将其放入您的问题中。