python报错 缺少实参self_跟我一起自学python语言 第9章 类(9.3.4 重写父类的方法)...

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

喜欢python就关注冠山巡山使。 我将跟大家一块自学完python语言。

08432bdf1ab27e751ffc6c3dd437ebfb.png

9.3.4 重写父类的方法

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()
27751d41f70b89bd086429c12350b02f.png

这是父类的方法

4669bc15215d5080f99c66f3d8c1ecf1.png

输出这里的汽车有邮箱

这里在子类写上同名方法

代码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()
0d6448039af90368b4bf19fa180eec1d.png

子类同名方法

c6c117eeabf74d1d268cbd248681d93c.png

再输出

现在,如果有人对电动汽车调用方法 fill_gas_tank(), Python将忽略 Car类中的方法
fill_gas_tank(),转而运行上述代码。使用继承时,可让子类保留从父类那里继承而来的精华,
并剔除不需要的糟粕。

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

今天学到这里。明天继续 的学习

如果喜欢可以 点赞+关注冠山巡山使 or 评论+转发此文章让其他喜欢Python的同学看到吆 。明天见!

关注冠山巡山使+私信:“编辑器”三个字 就可以有这个编辑器的下载地址了。关注冠山巡山使+私信:“自学python”可以下载此教程!(我是参考此教程做的自学课程。大多数人儿只是下载下来。看完的很少。希望能跟我一块自学完!)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值