Python报错TypeError: Battery.get_range()缺少必填参数'self'排查
问题排查与解决:TypeError: Battery.get_range() missing required 'self'参数
问题分析
从提供的代码和报错信息来看,表面报错是缺少self参数,但实际根源是代码存在多处逻辑和细节问题:
Battery类的get_range方法未处理默认电池容量(70kWh)的情况,导致range变量未定义,执行时触发的错误可能被误识别为TypeError;- 初始化电动汽车时,未指定电池容量为75kWh,与预期输出不符;
get_range方法的打印语句存在拼写错误,与预期输出不一致。
修复步骤
- 给
get_range方法添加默认分支,处理非75/100kWh的电池容量场景,避免变量未定义; - 在
ElectricCar的构造方法中,初始化Battery时传入参数75,匹配预期的电池容量; - 修正
get_range中的打印语句,补全"car"单词,对齐预期输出; - 确认所有实例方法都正确声明
self参数(当前代码已满足,若曾遗漏会直接触发TypeError)。
完整修正代码
car.py
"""一个用于表示汽车的类""" 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 = f"{self.year} {self.make} {self.model}" return long_name.title() def read_odometer(self): """打印显示汽车里程的语句""" print(f"This car has {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 Battery: """一个模拟电动汽车电池的简单尝试""" def __init__(self, battery_size=70): """初始化电池的属性""" self.battery_size = battery_size def describe_battery(self): """打印描述电池容量的语句""" print(f"This car has a {self.battery_size}-kWh battery.") def get_range(self): """打印该电池提供的续航里程相关语句""" if self.battery_size == 75: range_val = 260 elif self.battery_size == 100: range_val = 315 else: # 处理默认70kWh或其他容量的情况 range_val = 240 print(f"This car can go about {range_val} miles on a full charge.") class ElectricCar(Car): """模拟电动汽车特有的汽车属性""" def __init__(self, make, model, year): """ 初始化电动汽车的通用属性, 再初始化电动汽车的特有属性。 """ super().__init__(make, model, year) # 传入75匹配预期输出的电池容量 self.battery = Battery(75)
测试程序
from car import ElectricCar my_tesla = ElectricCar('tesla', 'model s', 2019) print(my_tesla.get_descriptive_name()) my_tesla.battery.describe_battery() my_tesla.battery.get_range()
验证结果
运行修正后的代码,输出与预期完全一致:
2019 Tesla Model S This car has a 75-kWh battery. This car can go about 260 miles on a full charge.
内容的提问来源于stack exchange,提问作者Z - 0
相关产品推荐
相关产品推荐

