首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

第7.7节 案例详解:Python类继承机制

  • 23-09-22 19:02
  • 2606
  • 12753
blog.csdn.net

本节实现一个类继承的小程序,下面一边结合代码一边介绍相关继承的知识。例子以车、汽车为例,车为父类、汽车为子类。
一、    定义父类Vehicle

  1. class Vehicle():
  2.    def __init__(self,wheelcount, power):#构造方法,参数有轮子数和动力
  3.        self.wheelcount,self.power,self.totaldistance = wheelcount,power,0
  4.        #初始化行驶总里程为0
  5.    def gettotaldistance(self):return self.totaldistance  #定义获取形式总里程的方法
  6.    def drive(self,distance):#定义drive方法
  7.            self.totaldistance += distance  

二、    定义子类Car

  1. class Car(Vehicle):
  2.    def __init__(self,wheelcount, power):
  3.        super().__init__(wheelcount, power)
  4.        Vehicle.__init__(self,wheelcount, power)
  5.        super(Car,self).__init__(wheelcount, power)
  6.        self.oil,self.oilcostperkm=0,0.1

子类内首先重写了构造方法,注意:
1.    首先调用了超类的构造方法,为了说明超类方法的调用,代码将三种调用超类构造方法都实现了(具体这三种方法的使用方法请参考上一节的介绍),实际上只要有一种就够了;
2.    超类构造方法中初始化了轮子数、动力以及总行驶里程。子类调用超类构造方法后,对于汽车又初始化了油量和每公里油耗。 

  1.  def drive(self,distance):
  2.        realdistance=min(distance,self.oil/self.oilcostperkm)
  3.        super().drive(realdistance)
  4.        self.oil -= realdistance*self.oilcostperkm
  5.        print("车开了{}公里,目前邮箱存油{:.2f}升,目前车辆总里程:{}KM".format(realdistance,self.oil, super().gettotaldistance()))

子类重写了父类的drive方法,本次只用了一种老猿推荐的方式调用父类的drive方法,重写的方法内根据油量确认了实际驾驶里程之后调用了父类的drive方法,同时对油量进行了调整,输出了一些车况信息,其中调用了父类的gettotaldistance()方法。 

  1. def  oiling(self,oil):
  2.        self.oil+=oil
  3.        print("加油{}升,目前邮箱存油{:.2f}升".format(oil,self.oil))

  实现子类独有的加油方法,父类的车可以是畜力或人力等其他方式驱动就没有这个方法。

  1. def needoiling(self):
  2.     if self.oil<5: return True
  3.     else:return False


 实现子类独有的是否需要加油判断方法。   

  1. def output(self):
  2.     print("车子动力为{},100KM油耗{}升,车子累计行驶{}KM,油箱存油{:.2f}L".format(self.power,self.oilcostperkm*100, super().gettotaldistance(),self.oil))


实现子类独有的输出车况的方法,其中调用了父类的gettotaldistance()方法。

到此为止整个子类的代码实现完成,它完全继承了父类方法gettotaldistance,采用重写+父类调用方式实现了drive和构造方法的继承,并实现了needoiling、oiling两个子类独有的方法,其实例变量self.wheelcount,self.power,self.totaldistance是从父类继承。
三、    调用的代码
下面是使用该类定义的一个实例,

  1. car = Car(4,'汽油发动机')
  2. car.oiling(50)
  3. for i in range(1,100):
  4.    print("***************第{}次循环************".format(i))
  5.    car.oiling(random.randint(10,60))  #随机加油x升
  6.    car.drive(random.randint(5,1000)) #随机驾驶x公里
  7.    car.output()  #输出车况信息
  8.    if car.needoiling(): break  #如果油不够了就结束循环


四、    上述例子的完整源代码

  1. #coding:utf-8
  2. import random
  3. class Vehicle():
  4.    def __init__(self,wheelcount, power):
  5.        self.wheelcount,self.power,self.totaldistance = wheelcount,power,0
  6.   
  7.    def drive(self,distance):
  8.        self.totaldistance += distance  
  9.        
  10.    def gettotaldistance(self):return self.totaldistance
  11.        
  12.           
  13. class Car(Vehicle):
  14.    def __init__(self,wheelcount, power):
  15.        super().__init__(wheelcount, power)
  16.        Vehicle.__init__(self,wheelcount, power)
  17.        super(Car,self).__init__(wheelcount, power)
  18.        self.totaldistance,self.oil,self.oilcostperkm=0,0,0.1
  19.    def drive(self,distance):
  20.        realdistance=min(distance,self.oil/self.oilcostperkm)
  21.        super().drive(realdistance)
  22.        self.oil -= realdistance*self.oilcostperkm
  23.        print("车开了{}公里,目前邮箱存油{:.2f}升,目前车辆总里程:{}KM".format(realdistance,self.oil,super().gettotaldistance()))
  24.            
  25.    def  oiling(self,oil):
  26.        self.oil+=oil
  27.        print("加油{}升,目前邮箱存油{:.2f}升".format(oil,self.oil))
  28.   
  29.    def needoiling(self):
  30.        if self.oil<5: return True
  31.        else:return False
  32.        
  33.    def output(self):
  34.        print("车子动力为{},100KM油耗{:.2f}升,车子累计行驶{}KM,油箱存油{:.2f}L".format(self.power,self.oilcostperkm*100,super().gettotaldistance(),self.oil))
  35. car = Car(4,'汽油发动机')
  36. car.oiling(50)
  37. for i in range(1,100):
  38.    print("***************第{}次循环************".format(i))
  39.    car.oiling(random.randint(10,60)) 
  40.    car.drive(random.randint(5,1000))
  41.    car.output()
  42.    if car.needoiling(): break

本节结合上节的知识通过一个例子介绍了类继承的使用方法,大家可以结合上节的知识理解相关实现代码。由于相关代码中使用了随机数,因此每次运行结果都可能不同,下面是其中某次运行的截图:


 
老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树基础语法类333596 人正在系统学习中
老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI
注:本文转载自blog.csdn.net的LaoYuanPython的文章"https://blog.csdn.net/LaoYuanPython/article/details/91589870"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top