位置: IT常识 - 正文
推荐整理分享案例详解:Python类继承机制(案例详解:功能点估算法),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:战略地图绘制案例详解,案例详解:S集团财务共享战略与服务中心建设,案例详解:S集团财务共享战略与服务中心建设,六爻案例详解,六爻案例详解,战略地图绘制案例详解,免抵退税计算方法案例详解,六爻案例详解,内容如对您有帮助,希望把文章链接给更多的朋友!
下面实现一个类继承的小程序,下面一边结合代码一边介绍相关继承的知识。例子以车、汽车为例,车为父类、汽车为子类。
一、定义父类Vehicle
classVehicle():def__init__(self,wheelcount,power):#构造方法,参数有轮子数和动力self.wheelcount,self.power,self.totaldistance=wheelcount,power,0#初始化行驶总里程为0defgettotaldistance(self):returnself.totaldistance#定义获取形式总里程的方法defdrive(self,distance):#定义drive方法self.totaldistance+=distance二、定义子类Car
classCar(Vehicle):def__init__(self,wheelcount,power):super().__init__(wheelcount,power)Vehicle.__init__(self,wheelcount,power)super(Car,self).__init__(wheelcount,power)self.oil,self.oilcostperkm=0,0.1子类内首先重写了构造方法,注意:
1.首先调用了超类的构造方法,为了说明超类方法的调用,代码将三种调用超类构造方法都实现了,实际上只要有一种就够了;
2.超类构造方法中初始化了轮子数、动力以及总行驶里程。子类调用超类构造方法后,对于汽车又初始化了油量和每公里油耗。?
defdrive(self,distance):realdistance=min(distance,self.oil/self.oilcostperkm)super().drive(realdistance)self.oil-=realdistance*self.oilcostperkmprint("车开了{}公里,目前邮箱存油{:.2f}升,目前车辆总里程:{}KM".format(realdistance,self.oil,super().gettotaldistance())子类重写了父类的drive方法,本次只用了一种老猿推荐的方式调用父类的drive方法,重写的方法内根据油量确认了实际驾驶里程之后调用了父类的drive方法,同时对油量进行了调整,输出了一些车况信息,其中调用了父类的gettotaldistance()方法。
defoiling(self,oil):self.oil+=oilprint("加油{}升,目前邮箱存油{:.2f}升".format(oil,self.oil))实现子类独有的加油方法,父类的车可以是畜力或人力等其他方式驱动就没有这个方法。
defneedoiling(self):ifself.oil<5:returnTrueelse:returnFalse实现子类独有的是否需要加油判断方法。
defoutput(self):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是从父类继承。
三、调用的代码
下面是使用该类定义的一个实例,
car=Car(4,'汽油发动机')car.oiling(50)foriinrange(1,100):print("***************第{}次循环************".format(i))car.oiling(random.randint(10,60))?#随机加油x升car.drive(random.randint(5,1000))#随机驾驶x公里car.output()?#输出车况信息ifcar.needoiling():break?#如果油不够了就结束循环#coding:utf-8importrandomclassVehicle():def__init__(self,wheelcount,power):self.wheelcount,self.power,self.totaldistance=wheelcount,power,0defdrive(self,distance):self.totaldistance+=distancedefgettotaldistance(self):returnself.totaldistanceclassCar(Vehicle):def__init__(self,wheelcount,power):super().__init__(wheelcount,power)Vehicle.__init__(self,wheelcount,power)super(Car,self).__init__(wheelcount,power)self.totaldistance,self.oil,self.oilcostperkm=0,0,0.1defdrive(self,distance):realdistance=min(distance,self.oil/self.oilcostperkm)super().drive(realdistance)self.oil-=realdistance*self.oilcostperkmprint("车开了{}公里,目前邮箱存油{:.2f}升,目前车辆总里程:{}KM".format(realdistance,self.oil,super().gettotaldistance()))defoiling(self,oil):self.oil+=oilprint("加油{}升,目前邮箱存油{:.2f}升".format(oil,self.oil))defneedoiling(self):ifself.oil<5:returnTrueelse:returnFalsedefoutput(self):print("车子动力为{},100KM油耗{:.2f}升,车子累计行驶{}KM,油箱存油{:.2f}L".format(self.power,self.oilcostperkm*100,super().gettotaldistance(),self.oil))car=Car(4,'汽油发动机')car.oiling(50)foriinrange(1,100):print("***************第{}次循环************".format(i))car.oiling(random.randint(10,60))car.drive(random.randint(5,1000))car.output()ifcar.needoiling():break下一篇:linux服务器环境一键安装wdCP图形面板安装教程(linux服务器环境搭建)
友情链接: 武汉网站建设