【发布时间】:2021-08-28 20:50:26
【问题描述】:
我正在尝试在CheckingAccount 类中使用transfer_to_saving 方法。但是,每当我创建SavingAccount 对象时,self.has_saving = True 不会将类属性更改为True。所以,每当我尝试转账时,它都会打印出Must create a saving account。
class CheckingAccount(Account):
balance = 0
def __init__(self, account_number, pin):
super().__init__(account_number)
self.SavingAccount = SavingAccount
self.pin = pin
def deposit(self, amount):
old_bal = self.balance
self.balance += amount
print(f'Previous Balance: ${old_bal}\nDeposit amount: ${amount}\nNew Balance: ${self.balance}')
def withdraw(self, pin, amount):
if pin == self.pin:
self.balance -= print('Insufficient funds') if amount > self.balance else amount
else:
print('Invalid PIN')
def transfer_to_saving(self, amount):
if self.SavingAccount.has_saving is False:
print('Must create a saving account')
elif amount > self.balance:
print('Insufficient funds')
else:
self.SavingAccount.balance += amount
self.balance -= amount
class SavingAccount(Account):
balance = 0
has_saving = False
def __init__(self, account_number):
super().__init__(account_number)
self.CheckingAccount = CheckingAccount
self.has_saving = True
def deposit(self, amount):
self.balance += amount
我这样做对吗? init 方法不应该改变类属性吗?
---更新---
我想要完成的目标是查明用户是否已经创建了储蓄账户。我有额外的用户类,我没有包括在内,因为它有点矫枉过正。但是,目标是防止用户在没有储蓄账户的情况下将资金从支票转为储蓄。
【问题讨论】:
-
你想做的可能不是你想做的。如果不知道为什么要拥有一个与已经代表储蓄账户的类或该类的实例相关联的 has_saving 标志变量,这很难说。正如其中一个答案所指出的那样,您可能会滥用对类名的引用并将该名称的实例变量分配给 self.同名变量。
-
是的,这就是我正在做的,滥用对类名的引用。我很感激反馈。我正在做一些改变。
标签: python class init class-attributes