Menu
CoddyTech

重新认识方法重写

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

多态意味着“多种形式”,它允许不同类的对象对同一个方法调用做出不同的响应。方法重写让这一点成为可能。

下面是一个包含方法的父类:

class Animal:
    def speak(self):
        return "Animal makes a sound"

创建子类,让它们重写同一个方法:

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

class Cow(Animal):
    def speak(self):
        return "Moo!"

每个子类都提供自己的 speak() 实现。

创建一个包含不同动物的列表:

animals = [Dog(), Cat(), Cow(), Animal()]

对所有对象调用相同的方法:

for animal in animals:
    print(animal.speak())

输出:

Woof!
Meow!
Moo!
Animal makes a sound

这就是多态的实际体现,相同的方法调用会根据对象的实际类型产生不同的行为。

你也可以在函数中使用多态:

def make_animal_speak(animal):
    print(animal.speak())

dog = Dog()
cat = Cat()

make_animal_speak(dog)  # 汪!
make_animal_speak(cat)  # 喵!

函数不需要知道它接收的是什么类型的动物,只需调用 speak(),就能获得正确的行为。

关键点:多态让你可以通过共同的接口,以相同的方式处理不同的对象。方法重写提供不同的实现,而多态让你可以统一调用这些方法。这让代码更灵活,也更容易扩展。

challenge icon

挑战

中等

在这个挑战中,你将实现一个车辆继承系统。

你需要编辑以下文件:

  • vehicle.py:实现基类 Vehicle,包含品牌、型号属性和方法
  • car.py:创建继承自 Vehicle 的 Car 类
  • motorcycle.py:创建继承自 Vehicle 的 Motorcycle 类
  • truck.py:创建继承自 Vehicle 的 Truck 类

每个文件中都有详细的 TODO 注释,逐步指导你完成实现。请留意文件之间所需的 import 语句,并遵循继承关系。driver.py 文件中包含测试用例,用于验证你的实现是否能在所有车辆类型中正常运行。

亲手试试

from vehicle import Vehicle
from car import Car
from motorcycle import Motorcycle
from truck import Truck

def vehicle_info(vehicle):
    return f"{vehicle.make} {vehicle.model}: {vehicle.start()}, Efficiency: {vehicle.fuel_efficiency()} mpg"


# 用不同的车辆测试:不要修改这段测试代码
vehicles = [
    Car("Toyota", "Camry"),
    Motorcycle("Harley", "Davidson"),
    Truck("Ford", "F-150"),
    Vehicle("Generic", "Vehicle")
]

for v in vehicles:
    print(vehicle_info(v))
quiz icon自我测试

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

面向对象编程中的所有课

自己练习: Python 在线编译器