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__ 方法和扩展父类的行为。
挑战
中等在这个挑战中,你将使用继承实现 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()这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Python 在线编译器