Python子类调用super().__init__报参数数量错误如何解决?
问题排查与解决方案
错误原因
- 核心错误是调用
super().__init__()时多传入了self参数:Python中使用super()调用父类的实例方法时,会自动将当前子类实例作为self参数隐式传递给父类方法,无需手动传入。你手动多传了self,导致父类__init__方法收到的参数数量超出定义的4个(self+3个业务参数),触发参数数量不匹配的类型错误。 - 附加笔误:父类
Car的__init__方法中self.make = make末尾多了一个多余的反引号,会额外触发语法报错。
解决方案
修改两处代码即可:
- 移除
ElectricCar类__init__方法中super().__init__()调用里的self参数 - 删除
Car类__init__方法中self.make = make末尾的多余反引号
修正后完整代码
class Car: def __init__(self, make, model, year): self.make = make self.model = model self.year = year self.odometer_reading = 0 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): # self.odometer_reading += miles class ElectricCar(Car): def __init__(self, make, model, year): # 移除手动传入的self参数 super().__init__(make, model, year) self.battery_size = 70 def describe_battery(self): print("This car has a " + str(self.battery_size) + "kWh battery") myTesla = ElectricCar('Tesla', 'model_s', 2016) print(myTesla.get_descriptive_name()) myTesla.describe_battery()
运行结果
2016 Tesla Model_S This car has a 70kWh battery
内容的提问来源于stack exchange,提问作者DataDojo99
相关产品推荐
相关产品推荐

