重新认识方法重写
本课属于 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(),就能获得正确的行为。
关键点:多态让你可以通过共同的接口,以相同的方式处理不同的对象。方法重写提供不同的实现,而多态让你可以统一调用这些方法。这让代码更灵活,也更容易扩展。
挑战
中等在这个挑战中,你将实现一个车辆继承系统。
你需要编辑以下文件:
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))这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Python 在线编译器