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

Python面向对象银行存扣款代码优化咨询

银行账户代码优化方案

一、优化初始化逻辑,提升灵活性

原代码中初始余额固定为0,可通过给__init__添加可选参数,支持自定义初始余额,同时保持默认值兼容原有逻辑。另外给账户ID生成逻辑添加注释,明确自增规则。

class Account:
    last_id = 1000  # 账户起始ID,自增生成唯一标识

    def __init__(self, customer, initial_balance=0):
        self.customer = customer
        # 生成唯一账户ID
        Account.last_id += 1
        self.id = Account.last_id
        # 验证初始余额合法性
        if initial_balance < 0:
            raise ValueError("初始余额不能为负数")
        self._balance = initial_balance

二、提取通用金额验证逻辑,减少代码冗余

存款和扣款操作都需要验证金额合法性(大于0、为数字类型),将这部分逻辑提取为私有方法,实现代码复用,也便于后续统一修改验证规则。

def _validate_positive_amount(self, amount):
    if not isinstance(amount, (int, float)):
        raise TypeError("金额必须为数字类型")
    if amount <= 0:
        raise NegativeAmountException("操作金额必须大于0")

三、修复核心方法的逻辑漏洞

  1. 存款(deposit)方法:原代码中金额≤0时错误打印“操作成功”,改为抛出异常;移除无用的pass语句,操作成功后返回更新后的余额而非直接打印,降低控制台输出耦合。
  2. 扣款(charge)方法:原代码未实现余额扣减逻辑,且存在无用的else: pass,补充扣减操作并简化条件判断流程。

优化后的核心方法:

def deposit(self, amount):
    self._validate_positive_amount(amount)
    self._balance += amount
    return self._balance

def charge(self, amount):
    self._validate_positive_amount(amount)
    if amount > self._balance:
        raise NotEnoughBalanceException(f"账户余额不足,当前余额:{self._balance}")
    self._balance -= amount
    return self._balance

四、规范自定义异常类的实现

原代码中使用的自定义异常未定义,显式创建继承自内置Exception的异常类,便于异常捕获和区分。

class NegativeAmountException(Exception):
    """操作金额为负数或零的异常"""
    pass

class NotEnoughBalanceException(Exception):
    """账户余额不足的异常"""
    pass

五、提升代码通用性的扩展点

  1. 支持账户类型扩展:将Account作为基类,子类可实现不同账户的特殊规则(如储蓄账户的利息计算、信用卡账户的透支额度):
class SavingsAccount(Account):
    def __init__(self, customer, initial_balance=0, interest_rate=0.02):
        super().__init__(customer, initial_balance)
        self.interest_rate = interest_rate

    def add_interest(self):
        """计算并添加利息"""
        interest = self._balance * self.interest_rate
        self._balance += interest
        return interest
  1. 添加安全的余额查询接口:对外提供只读的余额访问方式,避免直接操作私有属性_balance:
@property
def balance(self):
    return self._balance
  1. 操作日志记录:添加日志方法,记录每笔操作的类型、金额、时间,便于后续审计:
import datetime

def _log_operation(self, op_type, amount):
    timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    print(f"[{timestamp}] 账户{self.id} {op_type}:{amount},当前余额:{self._balance}")

内容的提问来源于stack exchange,提问作者Mery p.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:10:13