以下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计算机科学考试中看到与此相关的问题。