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

Python OOP问题:Vehicle类fare方法调用报错,无法得到预期结果

问题分析与代码修正

错误原因

  1. 实例方法缺少self参数:
    你的fare方法定义为def fare(capacity):,但Python中所有实例方法的第一个参数必须是self(代表实例本身)。当你调用vehicle.fare()时,Python会自动将vehicle实例作为第一个参数传入fare,此时capacity变量接收的是Vehicle对象,而非预期的容量数值,这就导致了TypeError: unsupported operand type(s) for *: 'Vehicle' and 'int'错误。

  2. 车费计算未使用实例属性:
    seating_capacity方法已经将容量值赋值给了self.capacity,但fare方法却试图通过参数获取容量,没有利用实例已存储的属性。另外,若用户未主动调用seating_capacity,实例中可能不存在capacity属性,会引发额外错误。

修正后的代码

class Vehicle:
    def __init__(self, max_speed, mileage):
        self.max_speed = max_speed
        self.mileage = mileage
        self.capacity = 4  # 初始化默认容量

    def seating_capacity(self, capacity=4):
        self.capacity = capacity
        return capacity

    def fare(self):
        # 使用实例的capacity属性计算车费
        return self.capacity * 10

class Bus(Vehicle):
    def __init__(self, max_speed, mileage):
        super().__init__(max_speed, mileage)  # 推荐使用super()调用父类构造方法

    def seating_capacity(self, capacity=50):
        return super().seating_capacity(capacity)

# 测试Vehicle实例
vehicle = Vehicle(240, 18)
print(f"Vehicle total fare is {vehicle.fare()}")  # 输出:Vehicle total fare is 40

# 测试Bus实例(可选)
bus = Bus(120, 20)
print(f"Bus total fare is {bus.fare()}")  # 输出:Bus total fare is 500

关键修改点

  • 给fare方法添加self参数,符合Python实例方法的规范。
  • 在Vehicle的__init__中初始化self.capacity =4,确保实例始终有默认容量值。
  • fare方法通过self.capacity获取容量,与seating_capacity方法的状态保持一致。
  • 优化Bus类的构造方法,使用super().__init__()替代直接调用父类构造,代码更简洁且适配多继承场景。

内容的提问来源于stack exchange,提问作者aadinnvv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:20:30