Skip to main content
 首页 » 编程设计

python之父类(super class)中的调用方法没有给出我期望的输出

2025年05月04日11birdshome

我正在学习 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