当前位置: 首页 > news >正文

【Python】实战:请使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息

 

# 定义汽车基类
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`方法)来操作不同类型的汽车,而实际的行为则取决于具体的汽车类型。
 

http://www.lryc.cn/news/478570.html

相关文章:

  • 互联网摸鱼日报(2024-11-07)
  • requests库
  • 大数据之多级缓存方案
  • QCon演讲实录|徐广治:边缘云原生操作系统的设计与思考
  • web第二次作业
  • 大模型技术讲解:大模型参数微调(大模型微调)
  • 测试自动化如何和业务流程结合?
  • Python进阶之IO操作
  • ubuntu如何卸载colmap
  • 【comfyui教程】ComfyUI即将迎来全新界面:升级体验就在11月15日
  • Leecode热题100-104.二叉树的最大深度
  • 深度学习中的 Dropout:原理、公式与实现解析
  • 【大数据学习 | HBASE】habse的表结构
  • 完成程序《大奖赛评分B》
  • K8S篇(基本介绍)
  • linux alsa-lib snd_pcm_open函数源码分析(三)
  • 基于ssm的个人健康管理系统
  • Debian下载ISO镜像的方法
  • 大厂面试真题-简单说说线程池接到新任务之后的操作流程
  • 「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
  • C++关键字:mutable
  • Agent 智能体开发框架选型指南
  • 基于Zynq FPGA对雷龙SD NAND的测试
  • AOSP沙盒android 11
  • 【JWT】Asp.Net Core中JWT刷新Token解决方案
  • AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
  • stm32不小心把SWD和JTAG都给关了,程序下载不进去,怎么办?
  • 【UE5】在材质中实现球形法线技术,常用于改善植物等表面的渲染效果
  • 【MATLAB源码-第210期】基于matlab的OFDM电力线系统仿真,不同梳状导频间隔对比。三种信道估计,三种插值误码率对比
  • 基于SpringBoot的城镇保障性住房管理策略