Python面向对象:如何优化自行车租赁系统消除代码冗余?
优化自行车租赁系统的冗余代码
你的代码里存在大量重复逻辑,比如输入合法性校验、库存检查、租赁成功后的通用提示等。通过提取公共方法可以有效消除冗余,同时让代码更符合面向对象的封装原则。
优化方案
- 把重复的输入验证、库存检查逻辑抽成私有方法
- 把租赁成功后的通用流程(记录时间、扣减库存、基础提示)抽成私有方法,仅保留不同租赁类型的差异化内容(如收费标准、租赁方式描述)
- 原有的小时/日租赁方法只需调用公共方法,传入各自的差异化参数即可
优化后的代码
import datetime class BikeRental: # 定义各租赁类型的收费标准,便于后续扩展 RENTAL_RATES = { "hourly": 5, "daily": 20 # 可根据实际需求修改日租价格 } def __init__(self, stock=0): self.stock = stock def displayStock(self): print(f'我们目前有 {self.stock} 辆自行车可供租赁') return self.stock def _validate_rental_request(self, num_bikes): """验证租赁请求的合法性""" if num_bikes < 0: print('租赁数量必须为正数!') return False if num_bikes > self.stock: print(f'抱歉,我们目前只有 {self.stock} 辆自行车可供租赁!') return False return True def _process_rental(self, num_bikes, rental_type): """处理租赁的通用流程""" now = datetime.datetime.now() rate = self.RENTAL_RATES[rental_type] # 打印租赁信息 print(f'你已租赁 {num_bikes} 辆自行车,租赁方式为{rental_type}') print(f'租赁时间:{now.date()} {now.hour}时') print(f'收费标准:每辆自行车{rate}美元/{rental_type[:-1]}') print('祝你骑行愉快!') # 扣减库存 self.stock -= num_bikes return now def rent_bike_hourly(self, num_bikes): """按小时租赁自行车""" if not self._validate_rental_request(num_bikes): return None return self._process_rental(num_bikes, "hourly") def rent_bike_daily(self, num_bikes): """按天租赁自行车""" if not self._validate_rental_request(num_bikes): return None return self._process_rental(num_bikes, "daily")
关键优化点
- 封装重复逻辑:用
_validate_rental_request统一处理输入和库存校验,_process_rental处理租赁成功后的通用流程,避免重复代码。 - 提升可扩展性:后续新增周租、月租等方式,只需在
RENTAL_RATES添加费率,再新增对应方法即可,无需重复编写校验和流程代码。 - 修复原代码bug:原
BikeOnDailyBasis方法中库存不足时未返回None,且打印内容错误(误写为hourly),优化后的代码统一了逻辑并修正了错误。 - 增强可读性:每个方法职责单一,逻辑清晰,便于后续维护和修改。
内容的提问来源于stack exchange,提问作者Vishva
相关产品推荐
相关产品推荐

