打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
跟我一起自学python语言 第9章 类(9.3.4 重写父类的方法)

久等了各位。继续把剩下的继续做完!前面文章的测试代码由于头条的代码块有问题。出现了缩进问题。如果大家测试得改一下缩进。就测试正常

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(),转而运行上述代码。使用继承时,可让子类保留从父类那里继承而来的精华,

并剔除不需要的糟粕。

因为后面代码篇幅比较大。大家看起来也不便。所以自学教程我会分割的比较多些。

著作权归作者所有
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Python自学知识点整理--类
笨办法学python3日常问题解决
入门必备!面向对象编程之Python函数与类
《Python编程:从入门到实践》学习笔记1
【Python】入门学习十一 类
Python中__init__方法注意点
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服