我正在学习 Python 中的继承,并且正在试验父类(super class)和 super() 函数。这是我的代码:
class Person:
def __init__(self, name, age, weight):
self.name = name
self.age = age
self.weight = weight
def describe(self):
return f"{self.name}, {self.age}, {self.weight}"
class Engineer(Person):
def __init__(self, name, age, weight):
super().__init__("Bla bla", 10, 100)
self.name = name
self.age = age
self.weight = weight
self.occupation = "Engineer"
def describe(self):
return super().describe()
my_engineer = Engineer("Larry", 17, 120)
print(my_engineer.describe())
我有 Java 背景,显然 super() 在 Python 中的工作方式与在 Java 中不同。在 Java 中,与此等效的代码输出为 Bla bla, 17, 120,但此代码输出的是 Larry, 17, 120。为什么这段代码打印出 Larry, 17, 120 而不是我预期的?据我了解,我正在实例化类 Engineer 并将 "Larry"、17 和 120 传递给__init__,但随后我将 "Bla bla"、10 和 100 传递给父类(super class)的 __init__,因此应该使用这些值初始化父类(super class)。然后当我调用 my_engineer.describe() 时,它应该在父类(super class)中调用 describe() 并使用父类(super class)的传入值。但显然,这不是正在发生的事情。谁能解释一下这是怎么回事?
请您参考如下方法:
super 工作正常;但是,在 super 调用之后,您可以使用传递给子构造函数的值覆盖每个属性。相反,只需调用 super 并且不使用相同的属性初始化子类:
class Engineer(Person):
def __init__(self, *args):
super().__init__("Bla bla", 10, 100)
def describe(self):
return super().describe()
my_engineer = Engineer("Larry", 17, 120)
print(my_engineer.describe())
输出:
Bla bla, 10, 100
