- 编写程序并测试,有一个汽车类Vehicle,类中的私有数据成员为车轮个数wheels和车重weight;小车类Car是汽车类vehicle派生类,其中包含载客人数passenger_load,默认4人;卡车类Truck是汽车类vehicle派生类,其中包含载客人数passenger_load和载重量payload。
class Vehicle(object):
def __init__(self,wheels,weight):
self.setWheels(wheels)
self.setWeight(weight)
def setWheels(self,wheels):
self.__wheels = wheels
def getWheels(self):
return self.__wheels
def setWeight(self,weight):
self.__weight = weight
def getWeight(self):
return self.__weight
def show(self):
print("轮胎数为:%d,车重为:%d"%(self.__wheels,self.__weight))
class Car(Vehicle):
def __init__(self,wheels,weight,passenger_load = 4):
super().__init__(wheels,weight)
self.setPassenger_load(passenger_load)
def setPassenger_load(self,passenger_load):
self.__passenger_load = passenger_load
def getPassenger_load(self):
return self.__passenger_load
def show(self):
print("轮胎数为:%d,车重为:%d,载客人数为:%d"%(self.getWheels(),self.getWeight(),self.getPassenger_load()))
class Truck(Vehicle):
def __init__(self,wheels,weight,passenger_load,payload):
super().__init__(wheels,weight)
self.setPassenger_load(passenger_load)
self.setPayload(payload)
def setPassenger_load(self,passenger_load):
self.__passenger_load = passenger_load
def setPayload(self,payload):
self.__payload = payload
def getPassenger_load(self):
return self.__passenger_load
def getPayload(self):
return self.__payload
def show(self):
#print("轮胎数为:%d,车重为:%d,载客人数为:%d,载重量为:%d."%(self.__wheels,self.__weight,self.__passenger_load,self.__payload))
print("车轮数为:%d。重量为:%d。载客人数为:%d。载重量为:%d。" % (self.getWheels(), self.getWeight(), self.getPassenger_load(),self.getPayload()))
vehicle=Vehicle(10,150)
vehicle.show()
car=Car(5,50)
car.show()
car=Car(5,50,5)#来看是否修改了默认值
car.show()
truck=Truck(12,200,12,200)
truck.show()
遇到的问题:
1.在子类的构造方法中调用父类的构造方法时,super(Vehicle,self)__init__(wheels,weight),会报错,原因是:呃呃呃 ,不太清楚,反正把super后面的括号内容去掉就没有报错哦。效果可能不如:Vehicle.__init__(self,wheels,weight)。
2.在子类的show方法中,输出值时,不能用self.__名字来输出。要使用self.get名字来调用。这个的原因很简单,只有在子类中新增加的对象可以通过self.__名字来输出。(因为你打出“self.”的时候,系统的快捷方式里就只有两个新增的对象)如果想用super输出通过语句super().show()来实现(在下一篇中使用)