久等了各位。继续把剩下的继续做完!前面文章的测试代码由于头条的代码块有问题。出现了缩进问题。如果大家测试得改一下缩进。就测试正常
喜欢python就关注冠山巡山使。 我将跟大家一块自学完python语言。
9.3.4 重写父类的方法
对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样, Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。
假设Car类有一个名为fill_gas_tank()的方法,它对全电动汽车来说毫无意义,因此你可能想重写它。下面演示了一种重写方式:
代码1(测试正常)
class Car():#Car类的代码"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):"""电动汽车的独特之处初始化父类的属性,再初始化电动汽车特有的属性"""self.make = makeself.model = modelself.year = yearself.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.modelreturn 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 = mileageelse:print("You can't roll back an odometer!")def increment_odometer(self, miles):self.odometer_reading += milesclass 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 = makeself.model = modelself.year = yearself.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.modelreturn 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 = mileageelse:print("You can't roll back an odometer!")def increment_odometer(self, miles):self.odometer_reading += milesclass 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(),转而运行上述代码。使用继承时,可让子类保留从父类那里继承而来的精华,
并剔除不需要的糟粕。
因为后面代码篇幅比较大。大家看起来也不便。所以自学教程我会分割的比较多些。
今天学到这里。明天继续 类 的学习
如果喜欢可以 点赞+关注冠山巡山使 or 评论+转发此文章让其他喜欢Python的同学看到吆 。明天见!
关注冠山巡山使+私信:“编辑器”三个字 就可以有这个编辑器的下载地址了。关注冠山巡山使+私信:“自学python”可以下载此教程!(我是参考此教程做的自学课程。大多数人儿只是下载下来。看完的很少。希望能跟我一块自学完!)