案例详解:Python类继承机制
发布时间:2025-10-07 17:42:17

以下是一个类继承小程序,结合代码介绍相关继承知识。以汽车和汽车为例,汽车是父亲,汽车是子类。
1.定义父类Vehiclele
classVehicle(): def__init__(self,wheelcount,power):#结构方法包括轮子数和动力 self.wheelcount,self.power,self.totaldistance=wheelcount,power,0 #初始行驶总里程为0 defgettotaldistance(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.oilcostperkm
print("汽车行驶{}公里,目前邮箱存油{:.2f}升,目前车辆总里程:{}KM".format(realdistance,self.oil,
super().gettotaldistance())子类重写了父类的drive方法。这一次,只有一种老猿推荐的方法来调用父类的drive方法。重写方法根据油量确认实际行驶里程后,调用父类drive方法,调整油量,输出一些车况信息,其中调用父类getotaldistance方法。
defoiling(self,oil):
self.oil+=oil
print("加油{}升,目前邮箱存油{:.2f}升".format(oil,self.oil))实现子类独特的加油方式,父类汽车可以通过畜力或人力等其它方式驱动,没有这种方式。
defneedoiling(self): ifself.oil<5:returnTrue else:returnFalse
是否需要加油来判断子类的独特性。
defoutput(self):
print("汽车动力为{},油耗为100km{}升,汽车累计行驶{}KM,油箱存油{:.2f}L".format(self.power,self.oilcostperkm*100,
super().gettotaldistance(),self.oil))调用父类的gettotaldistance()方法,实现子类独特的输出车况。
到目前为止,整个子类的代码已经完成。它完全继承了父类方法,通过重写+父类调用实现了drive和结构方法的继承,并实现了nedoiling、oiling两个子类的独特方法实际上是例变量selfg.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-8
importrandom
classVehicle():
def__init__(self,wheelcount,power):
self.wheelcount,self.power,self.totaldistance=wheelcount,power,0
defdrive(self,distance):
self.totaldistance+=distance
defgettotaldistance(self):returnself.totaldistance
classCar(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.1
defdrive(self,distance):
realdistance=min(distance,self.oil/self.oilcostperkm)
super().drive(realdistance)
self.oil-=realdistance*self.oilcostperkm
print("汽车行驶{}公里,目前邮箱存油{:.2f}升,目前车辆总里程:{}KM".format(realdistance,
self.oil,super().gettotaldistance()))
defoiling(self,oil):
self.oil+=oil
print("加油{}升,目前邮箱存油{:.2f}升".format(oil,self.oil))
defneedoiling(self):
ifself.oil<5:returnTrue
else:returnFalse
defoutput(self):
print("汽车动力为{},油耗为100公斤{:.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
下一篇 返回列表
