class Car():
'''一次模拟汽车的简单尝试'''
def __init__(self,make,model,year):
'''初始化描述汽车的属性:制造商、型号、生产年份'''
self.make = make
self.model = model
self.year = year
self.odometer_reading = 24 #里程表读数
def update_odometer(self,mileage): #修改属性值
'''将里程表读数设置为指定的值'''
self.odometer_reading += mileage
def get_descriptive_name(self):
'''返回整洁的描述信息'''
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
'''打印一条指出汽车里程的信息'''
print('这辆车的汽车里程是: ' + str(self.odometer_reading))
def fill_gas_tank(self):
'''汽车油箱'''
print('汽车有油箱')
#--------------------------------------------------------------------
class ElectricCar(Car):
'''电动车的独特之处'''
def __init__(self,make,model,year):
'''初始化父类属性'''
super().__init__(make,model,year)
self.battery_size = 70 #添加一个电动车特有的属性:电瓶,以及电瓶容量
def describe_battery(self):
'''打印一条描述电瓶容量的信息'''
print('这辆电动车有: ' + str(self.battery_size) + ' 的电瓶容量')
def fill_gas_tank(self): #重写父类的方法
'''电动车有电瓶'''
print('汽车有电瓶')
my_tesla = ElectricCar('特斯拉','model s ',2016)
print(my_tesla.get_descriptive_name())
#-------------------------------------------------------
my_tesla.read_odometer()
my_tesla.describe_battery()
#-------------------------------------------------
my_tesla.battery_size = 100
my_tesla.describe_battery()
my_tesla.fill_gas_tank() #实例,调用被重写的此方法
=========================================================================================
执行结果:
2016 特斯拉 Model S
这辆车的汽车里程是: 24
这辆电动车有: 70 的电瓶容量
这辆电动车有: 100 的电瓶容量
汽车有电瓶
==========================================================================================
对于父类的方法,只要它不符合子类模拟的实物行为,都可以对其进行重写。
为此,可以在子类中定义一个与要重写的父类方法同名,这样python将不会考虑这个父类方法,
而只关注你在子类中定义的相应的方法。