如何在python中实现帐户类的转账方法

时间:2018-08-06 19:55:49

标签: python python-3.x class oop object

所以,我正在用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”

2 个答案:

答案 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)