所以,我正在用python创建一个Account类。它具有存款,取款和检查余额的基本功能。我在使用传输方法时遇到了麻烦。 这是我的代码(对不起代码转储):
class Account:
"""simple account balance of bank"""
def __init__ (self, name, balance):
self.name = name
self.balance = balance
print('Account of ' + self.name)
def deposit(self, amount):
if amount > 0:
self.balance += amount
self.statement()
def withdrawal(self, amount):
if amount > 0 and self.balance > amount:
self.balance -= amount
self.statement()
else:
print("the ammount in your is not sufficent")
self.statement()
def statement(self):
print("Hi {} your current balance is {}".format(self.name,self.balance))
def transfer(self, amount, name):
self.balance = self.balance - amount
name.balance = name.balance + amount
return name.balance()
现在,它适用于
abc = Account("abc", 0)
abc.deposit(1000)
siddharth = Account("siddharth", 159)
那我该如何运行以下代码:
siddharth.transfer(11, "abc")
siddharth.transfer(11, Account.abc)
此外,如果帐户“ abc”不存在,如何创建帐户“ abc”
答案 0 :(得分:0)
您的代码将是有关注意变量/参数命名的最佳课程。您的方法transfer(self, amount, name)
应该是transfer(self, amount, account)
。我认为现在很明显,正确的代码是
abc = Account("abc", 0)
abc.deposit(1000)
siddharth = Account("siddharth", 159)
siddharth.transfer(11, abc)
在误导姓名时要格外小心。
除了您的问题外,我认为帐户不应该具有 transfer 方法。 帐户仅关心存款和取款,而不关心它们的处理方式。 IMO Transfer 应该是一个具有2个Account
参数的函数,从第一个参数中撤出,在第二个参数中进行存放。这只是遵循单一责任原则。
遵循相同的原则,请勿在帐户中放置打印功能。考虑一下您不知道将在其中使用类的上下文。如果是在Web应用程序中,则打印将重定向到/ dev / null…
最后,总是按照你说的去做。如果我有一个余额为b的帐户,我希望在调用存入值为v的存款后,我的帐户余额将为b + v。无论v的值为多少。您都可以检查该值而不添加a负值(即提现),因此您必须警告调用者不要添加该值,因此会引发异常。提款也一样。
答案 1 :(得分:-1)
您首先可以在一个声明的位置包含所有帐户的数组。然后,您可以首先尝试查找一个帐户是否存在。如果没有,请创建一个帐户并通过。
allAccounts = []
#create bunch of accounts including 'abc'
siddharth = Account("siddharth", 159)
searchResult = [x for x in allAccounts if x.name == 'abc']
#assuming that account names are unique
if len(searchResult) == 0:
acc = Account("abc", 11)
else:
acc = searchResult[0]
siddarth.transfer(11, acc)