You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python报错TypeError: Battery.get_range()缺少必填参数'self'排查

问题排查与解决:TypeError: Battery.get_range() missing required 'self'参数

问题分析

从提供的代码和报错信息来看,表面报错是缺少self参数,但实际根源是代码存在多处逻辑和细节问题:

  • Battery类的get_range方法未处理默认电池容量(70kWh)的情况,导致range变量未定义,执行时触发的错误可能被误识别为TypeError;
  • 初始化电动汽车时,未指定电池容量为75kWh,与预期输出不符;
  • get_range方法的打印语句存在拼写错误,与预期输出不一致。

修复步骤

  1. 给get_range方法添加默认分支,处理非75/100kWh的电池容量场景,避免变量未定义;
  2. 在ElectricCar的构造方法中,初始化Battery时传入参数75,匹配预期的电池容量;
  3. 修正get_range中的打印语句,补全"car"单词,对齐预期输出;
  4. 确认所有实例方法都正确声明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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:15:17