我对这个python代码有一个困惑



以下Python代码显示:

i from B is :  24660

我认为它应该显示i from B is : 28770,因为__init__方法是使用super()从父类调用的,并且它应该从父类而不是子类运行方法calc_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().__init__()是从子类调用的。

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

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

相关内容

最新更新