如何定义函数修改Train类的speed整数属性实现列车加减速控制
列车速度控制函数实现方案
- 首先修正原代码的初始化问题:原
__init__方法中self.speed = ()用空元组初始化错误,无法存储数值类型的速度,改为初始值0,对应列车静止的初始状态 - 你预留的方法可以扩展为三类速度控制接口:直接设置目标速度、增量加速、增量减速,同时增加边界校验避免非法速度值
完整修改后代码
class Train(): serial_nummer = 2021001 # 可根据列车类型自定义最高速度限制,此处设为350km/h MAX_SPEED = 350 def __init__(self, type, buildyear): self.type = type self.buildyear = buildyear self.serial_nummer = Train.serial_nummer # 修正速度初始化 self.speed = 0 Train.serial_nummer += 1 # 直接设置目标速度的方法,统一做合法性校验 def set_speed(self, target_speed): if target_speed < 0: print("速度不能为负数,已自动调整为0") self.speed = 0 elif target_speed > self.MAX_SPEED: print(f"速度超过最高限制{self.MAX_SPEED}km/h,已自动调整为最高速度") self.speed = self.MAX_SPEED else: self.speed = target_speed # 增量加速方法,传入需要增加的速度值 def accelerate(self, add_speed): if add_speed < 0: print("加速值不能为负,减速请调用decelerate方法") return new_speed = self.speed + add_speed self.set_speed(new_speed) # 增量减速方法,传入需要减少的速度值 def decelerate(self, reduce_speed): if reduce_speed < 0: print("减速值不能为负,加速请调用accelerate方法") return new_speed = self.speed - reduce_speed self.set_speed(new_speed) def __str__(self): return (f"Train type: {self.type} \nBuildyear: {self.buildyear} \nSerial number: {self.serial_nummer} \nCurrent speed: {self.speed}km/h\n\n") # 调用示例 train1 = Train('Alfatrain', '2001') # 直接设置速度为100 train1.set_speed(100) print(train1) # 加速50 train1.accelerate(50) print(train1) # 减速30 train1.decelerate(30) print(train1)
如果需要完全禁止用户直接通过train.speed = xxx的方式修改速度,可将speed改为私有属性,搭配@property装饰器实现只读访问,仅允许通过你定义的三个方法修改速度:
class Train(): # 其余代码不变 def __init__(self, type, buildyear): # 其余初始化逻辑不变 self._speed = 0 @property def speed(self): return self._speed # 三个控制方法里的self.speed全部替换为self._speed即可
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

