Python中如何在其他类实例中获取更新后的变量值?
问题原因
你遇到的核心问题是值传递导致的状态不同步:
- 创建
accountX_interest = SavingsAccount(5, accountX.balance, 0.05)时,传入的accountX.balance是一个独立数值(500),SavingsAccount会将这个数值存在自身的self.balance中,和原始accountX对象没有关联。 - 后续对
accountX执行的存款、取款操作,只会修改accountX自身的balance,不会影响accountX_interest里存储的独立数值。 - 而
credit_request是在存款、取款操作完成后创建的,传入的是当时accountX.balance的最新值(800),所以它能拿到正确数值。
解决方案
有两种常见修复方式,可根据需求选择:
方式1:延迟创建SavingsAccount实例
等所有对accountX的余额操作完成后,再创建accountX_interest,确保传入最新余额:
accountX = Account(5, 500) # 先执行存款、取款操作 deposit = accountX.deposit(500) withdraw = accountX.withdraw(200) # 此时创建SavingsAccount,传入更新后的balance accountX_interest = SavingsAccount(5, accountX.balance, 0.05) credit_request = BusinessAccount("CZ50", accountX.balance, 5000) # 后续打印操作不变 print(deposit) print(withdraw) print(accountX.get_balance()) print(accountX_interest.calculate_interest()) print(credit_request.calculate_credit()) print(credit_request.get_balance())
方式2:让SavingsAccount持有原始Account的引用
如果需要后续accountX余额变化时,accountX_interest能自动获取最新值,可修改SavingsAccount实现,让它持有原始Account对象的引用:
class SavingsAccount: def __init__(self, account, interest_rate): # 持有原始Account对象的引用 self.account = account self.interest_rate = interest_rate def calculate_interest(self): # 每次计算时从原始Account获取最新余额 current_balance = self.account.balance interest_rate_calculation = current_balance * self.interest_rate return f'Your interest rate is {self.interest_rate} and balance {current_balance}. Total calculated is {interest_rate_calculation}.' # 实例化时传入accountX对象而非balance数值 accountX = Account(5, 500) accountX_interest = SavingsAccount(accountX, 0.05) deposit = accountX.deposit(500) withdraw = accountX.withdraw(200) credit_request = BusinessAccount("CZ50", accountX.balance, 5000)
这种方式下,无论何时调用calculate_interest,都会拿到accountX的最新余额。
补充说明
credit_request当前能拿到正确值只是因为创建时机在余额更新之后。如果后续再修改accountX的余额,credit_request的balance也不会同步,除非同样用方式2让它持有原始Account的引用。
内容的提问来源于stack exchange,提问作者Nolgath
相关产品推荐
相关产品推荐

