# 定义汽车基类
class Car:
def __init__(self, model, license_plate):
self.model = model # 车型
self.license_plate = license_plate # 车牌
def start(self):
print(f"{self.model} ({self.license_plate}) 启动了。")
def stop(self):
print(f"{self.model} ({self.license_plate}) 停止了。")
# 定义出租车类
class Taxi(Car):
def __init__(self, model, license_plate, company):
super().__init__(model, license_plate) # 调用父类构造函数
self.company = company # 所属出租公司
def start(self):
super().start() # 调用父类的启动方法
print(
f"乘客您好\n我是 {self.company}的司机,我的车牌是{self.license_plate},您要去哪里?\n目的地到了,请您付费下车,欢迎您再次乘坐")
'''
乘客您好
我是长城出租车公司的,我的车牌是:京A88888,您要去哪里?
目的地到了,请您付费下车,欢迎再次乘坐
'''
# 定义家用轿车类
class PrivateCar(Car):
def __init__(self, model, license_plate, owner_name):
super().__init__(model, license_plate) # 调用父类构造函数
self.owner_name = owner_name # 车主姓名
def start(self):
super().start() # 调用父类的启动方法
print(f"我是{self.owner_name},我的汽车我做主\n目的地到了,我们去玩吧")
# 测试代码
if __name__ == "__main__":
# 测试出租车类
taxi = Taxi("宝马", "京A888888", "长城出租公司")
taxi.start() # 启动出租车
taxi.stop() # 停止出租车
# 测试家用轿车类
private_car = PrivateCar("奔驰", "冀A66666", "武大郎")
private_car.start() # 启动家用轿车
private_car.stop() # 停止家用轿车
该代码定义了一种汽车模型,通过面向对象的编程方式展示不同类型汽车的行为和特征。
首先,创建了一个名为`Car`的基类,它的构造方法`__init__`接受两个参数:`model`和`license_plate`,分别表示车型和车牌。该类定义了两个方法:`start`和`stop`,分别用于表示汽车启动和停止时的行为,方法中使用了格式化字符串来输出相应的信息。
接下来,定义一个子类`Taxi`,继承自`Car`类。`Taxi`类在其构造函数中除了调用父类的构造函数外,还增加了一个新属性`company`,表示出租车所属的出租公司。`Taxi`类重写了`start`方法,首先调用父类的`start`方法,然后输出出租车司机的相关信息和对乘客的问候。
然后,定义另一个子类`PrivateCar`,同样继承自`Car`类。此类在构造方法中增加了一个新属性`owner_name`,表示车主姓名。与`Taxi`类相似,`PrivateCar`类也重写了`start`方法,在调用父类的`start`方法后,输出车主的相关信息。
在测试代码部分,`if __name__ == "__main__":`确保该部分代码仅在脚本作为主程序执行时被调用。创建了一辆出租车对象`taxi`,并调用`start()`和`stop()`方法,测试其启动和停止的行为。接着,创建一辆家用轿车对象`private_car`,同样调用其`start()`和`stop()`方法,进行类似的测试。
通过这种继承和方法重载的方式,实现了多态性,使得不同类型的汽车在启动时输出不同的行为和信息。这样,使用者可以通过统一接口(`start`和`stop`方法)来操作不同类型的汽车,而实际的行为则取决于具体的汽车类型。