python
主页 > 脚本 > python >

用Python编写一个功能正确的Car类(含加速与刹车逻辑)

2026-07-02 | 佚名 | 点击:

本文详解如何正确实现一个 python `car` 类,重点修复刹车方法中的语法错误和逻辑问题,确保速度属性能按预期递减(每次减 5),并在达到 0 后不再为负值。

在面向对象编程实践中,Car 类是一个经典的教学示例,用于演示属性封装、方法调用与状态维护。但初学者常因语法细节或边界逻辑疏忽导致行为异常——例如本例中刹车后速度持续为负、甚至卡死在 -5,根源在于代码存在两处关键问题:

  1. 语法错误:self.__speed = -=5 是非法语句,Python 不支持 = -= 这类混合赋值运算符;正确写法应为 self.__speed -= 5 或 self.__speed += -5;
  2. 逻辑缺陷:原需求要求“刹车至 0 后停止递减”,但原始代码未做非负校验,导致速度可无限降低。

此外,原示例中使用了双下划线前缀(如 __year_model)试图实现私有属性,但未配套提供 getter/setter,且测试代码传参顺序与构造函数定义不一致("Corvette", 2022 vs __year_model, __make),易引发混淆。为兼顾可读性与教学实用性,我们采用单下划线约定(_year_model)表示受保护属性,并显式处理速度下限。

以下是修正后的完整 Car 类实现:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

class Car:

    def __init__(self, year_model, make):

        self._year_model = year_model

        self._make = make

        self._speed = 0

 

    def accelerate(self):

        self._speed += 5

 

    def brake(self):

        self._speed = max(0, self._speed - 5)  # 关键:防止速度低于0

 

    def get_speed(self):

        return self._speed

使用示例:

Python 3.14.3

微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。

1

2

3

4

5

6

7

8

9

10

11

12

13

my_car = Car(2022, "Corvette")  # 注意参数顺序:year_model 在前,make 在后

 

# 先加速5次,达到25

for i in range(5):

    my_car.accelerate()

    print(f"accelerate {i}: {my_car.get_speed()}")

 

print()

 

# 再刹车5次,从25→20→15→10→5→0(不再为负)

for i in range(5):

    my_car.brake()

    print(f"brake {i}: {my_car.get_speed()}")

输出结果完全符合预期:

1

2

3

4

5

6

7

8

9

10

11

accelerate 0: 5

accelerate 1: 10

accelerate 2: 15

accelerate 3: 20

accelerate 4: 25

 

brake 0: 20

brake 1: 15

brake 2: 10

brake 3: 5

brake 4: 0

注意事项总结:

原文链接:https://www.php.cn/faq/2758486.html
相关文章
最新更新