Menu
CoddyTech

super() 函数

本课属于 Coddy Python 学习旅程的“面向对象编程”单元。第 18 课,共 64 课。

super() 函数允许子类调用父类中的方法。这样,你就可以扩展父类的功能,而不是完全替换它。

下面是一个在构造函数中使用 super() 的示例:

class Animal:
    def __init__(self, name):
        self.name = name
        print(f"Animal created: {name}")
class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # 调用父类的 __init__
        self.breed = breed
        print(f"Dog breed set: {breed}")

创建一个狗对象:

buddy = Dog("Buddy", "Golden Retriever")
print(f"Name: {buddy.name}, Breed: {buddy.breed}")

输出:

Animal created: Buddy
Dog breed set: Golden Retriever
Name: Buddy, Breed: Golden Retriever

使用 super() 来扩展父类方法:

class Animal:
    def make_sound(self):
        print("Generic animal sound")
class Dog(Animal):
    def make_sound(self):
        super().make_sound()  # 先调用父类的方法
        print("Woof!")        # 添加狗特有的行为

调用扩展后的方法:

buddy = Dog()
buddy.make_sound()

输出:

Generic animal sound
Woof!

不使用 super(),你就会失去父类的功能:

class Cat(Animal):
    def make_sound(self):
        print("Meow!")  # 只发出猫叫声,忽略父类的方法
cat = Cat()
cat.make_sound()

输出:

Meow!

重点:使用 super() 在子类中调用父类的方法。这样可以扩展功能,而不是完全替换它。常见用途包括调用父类的 __init__ 方法和扩展父类的行为。

challenge icon

挑战

中等

在这个挑战中,你将使用继承实现 Person 和 Employee 类的层次结构。

  • person.py:包含具有 name 和 age 属性的 Person 类
  • employee.py:包含继承自 Person 的 Employee 类
  • driver.py:用于测试你的实现的主文件

每个文件都包含详细的 TODO 注释,帮助你完成实现。

亲手试试

# TODO: 从 person.py 导入 Person 类
# TODO: 从 employee.py 导入 Employee 类

def main():
    # TODO: 创建一个 name 为 "Alice"、age 为 30 的 Person 对象
    person = None
    
    # TODO: 创建一个 name 为 "Bob"、age 为 35、job 为 "Developer" 的 Employee 对象
    employee = None
    
    # TODO: 调用 Person 对象的 introduce() 方法
    # 预期输出:"Hi, I'm Alice and I'm 30 years old"
    
    # TODO: 用 print() 打印一个空行,留出间隔
    
    # TODO: 调用 Employee 对象的 introduce() 方法
    # 预期输出: 
    # "Hi, I'm Bob and I'm 35 years old"
    # "I work as a Developer"

if __name__ == "__main__":
    main()
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Python 在线编译器