Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中实现account类的转账方法_Python_Python 3.x_Class_Oop_Object - Fatal编程技术网

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

如何在python中实现account类的转账方法,python,python-3.x,class,oop,object,Python,Python 3.x,Class,Oop,Object,所以,我正在用python创建一个Account类。它具有存款、取款和检查余额的基本功能。不过,我在转换方法上遇到了问题。 这是我的代码(很抱歉代码转储): 现在,它适用于 abc = Account("abc", 0) abc.deposit(1000) siddharth = Account("siddharth", 159) 那么,如何运行以下代码: siddharth.transfer(11, "abc") siddharth.transfer(11, Account.abc) 此外

所以,我正在用python创建一个Account类。它具有存款、取款和检查余额的基本功能。不过,我在转换方法上遇到了问题。 这是我的代码(很抱歉代码转储):

现在,它适用于

abc = Account("abc", 0)
abc.deposit(1000)
siddharth = Account("siddharth", 159)
那么,如何运行以下代码:

siddharth.transfer(11, "abc")
siddharth.transfer(11, Account.abc)

此外,如果帐户“abc”不存在,如何创建帐户“abc”

您可以首先在某个位置声明所有帐户的数组。然后,您可以首先尝试查找帐户是否存在。如果没有,创建一个帐户并传递它们

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)

您的代码将是关于如何处理变量/参数命名的最佳课程。您的方法
转账(自我、金额、姓名)
应该是
转账(自我、金额、账户)
。我认为现在,很明显正确的代码是

abc = Account("abc", 0)
abc.deposit(1000)
siddharth = Account("siddharth", 159)
siddharth.transfer(11, abc)
对误导性的名字要特别小心

撇开你的问题不谈,我认为账户不应该有转账方式。一个账户只关心存款和取款,而不关心用它们做什么。IMO转账应该是一个具有2个
账户
参数的功能,从第一个账户中提取,在第二个账户中进行存款。这只是为了遵循单一责任原则

遵循同样的原则,不要将打印功能放在帐户中。考虑一下你不知道你的课堂将被使用的背景。如果是在web应用程序中,打印将重定向到/dev/null


最后,一定要照你说的去做。如果我有一个余额为b的账户,我希望在催缴存款金额为v后,我的账户余额将为b+v。不管v的值是多少。您检查值并且不添加负值(即撤消)是正确的,因此您必须警告调用方您不会添加值,因此引发异常。取款也一样。

问题是,您编写的转账方法希望
名称
是帐户对象(您正在调用
名称.余额
),而名称实际上是一个
str
“abc”
)显示如何定义转账函数,我想让函数将金额转移到同一类的另一个对象谢谢,@PatrickArtner,但解释器说“TypeError:‘int’object不可调用”'我想能够使用帐户名,而不是我给它的名称,如果这有意义的话?所以我想说Siddharth已将11转移到帐户abc Siddharth.transfer(11,abc)我只是不知道怎么做。一种方法是使用find函数在转账之前首先找到account对象。找到对象后,可以在transfer()方法中传递它。如果找不到,可以创建一个对象并在siddarth.transfer()中传递它。
siddharth.transfer(11,abc)
abc = Account("abc", 0)
abc.deposit(1000)
siddharth = Account("siddharth", 159)
siddharth.transfer(11, abc)