Python新手在这里。我在Eclipse上使用PyDev。Money和TypeError:__init __()需要1到2个位置参数,但有3个被给出
我正在编写一个程序来处理我的银行交易。我使用Money包(1.3.0)。直到我了解到,你可以创造货币的货币预设的变种(如on this page程序工作正常
当我用钱以下剪掉正常工作,但它给当我用我USD预设错误:
from money import Money
class USD(Money):
def __init__(self, amount='0'):
super().__init__(amount=amount, currency='USD')
a = Money(0,'USD')
b = Money(-360,'USD')
a += b
print(a)
c = USD(0)
d = USD(-360)
c += d
print(c)
(打印的真正目的()语句是一个方便的地方设置一个断点。)
我得到这个错误:
File "D:\Dev\mymoney\mymoney.py", line 11, in <module>
c += d
File "C:\Program Files\Python35\lib\site-packages\money\money.py", line 119, in __add__
return self.__class__(amount, self._currency)
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
我想知道如何修复我的代码,使其正常工作,但我需要了解问题所在。对于后者,无论是你的解释还是指向我可以学习的文档中的某些东西都是有帮助的。
因为我正在做的是完全按照文档,我决定尝试报告它作为一个错误。我了解到这是一个已知问题。请参阅https://github.com/carlospalol/money/issues/19。第20期是改善对单币种子支持的建议。由于我的知识水平不足以自己提交修复,所以我会保持简单,现在就使用非子类方法。 –
令人费解的是,该消息提到__init__函数是问题所在。它指向的代码行是具有__class__的返回。我还没有在Python中学习过类,但是我发现__class__表示法指的是创建一个新的类实例,这可能会调用它的__init__函数。这是对的吗? –
这是正确的,是的:)和'+ ='调用'__add__'的类,这是不重写的子类。 – miradulo