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

Python面向对象:如何优化自行车租赁系统消除代码冗余?

优化自行车租赁系统的冗余代码

你的代码里存在大量重复逻辑,比如输入合法性校验、库存检查、租赁成功后的通用提示等。通过提取公共方法可以有效消除冗余,同时让代码更符合面向对象的封装原则。

优化方案

  1. 把重复的输入验证、库存检查逻辑抽成私有方法
  2. 把租赁成功后的通用流程(记录时间、扣减库存、基础提示)抽成私有方法,仅保留不同租赁类型的差异化内容(如收费标准、租赁方式描述)
  3. 原有的小时/日租赁方法只需调用公共方法,传入各自的差异化参数即可

优化后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:54:39