久等了各位。继续把剩下的继续做完!前面文章的测试代码由于头条的代码块有问题。出现了缩进问题。如果大家测试得改一下缩进。就测试正常
9.3.4 重写父类的方法
9.3.4 重写父类的方法
对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样, Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。
假设Car类有一个名为fill_gas_tank()的方法,它对全电动汽车来说毫无意义,因此你可能想重写它。下面演示了一种重写方式:
代码1(测试正常)
class Car():
#Car类的代码
'''一次模拟汽车的简单尝试'''
def __init__(self, make, model, year):
'''
电动汽车的独特之处
初始化父类的属性,再初始化电动汽车特有的属性
'''
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
self.battery_size = 70 #添加一个电瓶属性
def fill_gas_tank(self):
'''这辆汽车有邮箱'''
print('这个汽车有邮箱啊')
def describe_battery(self):
'''打印一条描述电瓶容量的消息'''
print('This car has a ' + str(self.battery_size) + '-kWh battery.')
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print('This car has ' + str(self.odometer_reading) + ' miles on it.')
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print('You can't roll back an odometer!')
def increment_odometer(self, miles):
self.odometer_reading += miles
class ElectricCar(Car):
#定义了子类ElectricCar,定义子类时必须在括号内指定父类的名称
'''电动汽车的独特之处'''
def __init__(self, make, model, year):
#方法__init__()接受创建Car实例所需的信息
'''初始化父类的属性'''
super(ElectricCar, self).__init__(make, model, year)
#函数super()需要两个实参:子类名和对象self。为帮助Python将父类和子类关联起来,这些实参必不可少。
my_tesla = ElectricCar('tesla', 'model s', 2016)
#创建ElectricCar类的一个实例,并将其存储在变量my_tesla中
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
my_tesla.fill_gas_tank()
这是父类的方法
输出这里的汽车有邮箱
这里在子类写上同名方法
代码2(测试正常)
class Car():
#Car类的代码
'''一次模拟汽车的简单尝试'''
def __init__(self, make, model, year):
'''
电动汽车的独特之处
初始化父类的属性,再初始化电动汽车特有的属性
'''
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
self.battery_size = 70 #添加一个电瓶属性
def fill_gas_tank(self):
'''这辆汽车有邮箱'''
print('这个汽车有邮箱啊')
def describe_battery(self):
'''打印一条描述电瓶容量的消息'''
print('This car has a ' + str(self.battery_size) + '-kWh battery.')
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print('This car has ' + str(self.odometer_reading) + ' miles on it.')
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print('You can't roll back an odometer!')
def increment_odometer(self, miles):
self.odometer_reading += miles
class ElectricCar(Car):
#定义了子类ElectricCar,定义子类时必须在括号内指定父类的名称
'''电动汽车的独特之处'''
def __init__(self, make, model, year):
#方法__init__()接受创建Car实例所需的信息
'''初始化父类的属性'''
super(ElectricCar, self).__init__(make, model, year)
#函数super()需要两个实参:子类名和对象self。为帮助Python将父类和子类关联起来,这些实参必不可少。
def fill_gas_tank(self):
'''电动车没有邮箱'''
print('这个电动汽车不需要邮箱')
my_tesla = ElectricCar('tesla', 'model s', 2016)
#创建ElectricCar类的一个实例,并将其存储在变量my_tesla中
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
my_tesla.fill_gas_tank()
子类同名方法
再输出
现在,如果有人对电动汽车调用方法 fill_gas_tank(), Python将忽略 Car类中的方法
fill_gas_tank(),转而运行上述代码。使用继承时,可让子类保留从父类那里继承而来的精华,
并剔除不需要的糟粕。
因为后面代码篇幅比较大。大家看起来也不便。所以自学教程我会分割的比较多些。
联系客服