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
私のコードを修正して正しく動作するようにしたいのですが、問題の内容を理解する必要があります。後者については、あなたの説明か、私が学ぶことができるドキュメンテーションの何かへのポインタが役に立つでしょう。 source code hereで定義された__add__
方法では、新しいクラスが__init__
にamount
とself._currency
の両方を渡して返されるため
私がやっていることはドキュメントに正確に従っているので、私はバグとして報告しようと決めました。私はこれが既知の問題であることを知りました。 https://github.com/carlospalol/money/issues/19を参照してください。問題20は、単一通貨サブクラスのサポートを改善するための提案です。私は自分自身で修正を提出するのに十分な知識がないので、私は物事を単純に保ち、今は非サブクラスのアプローチを使用します。 –
__init__関数が問題であるとメッセージが話していることは、私には困惑しています。それが指すコード行は__class__を持つ戻り値です。私はまだPythonでクラスを勉強していませんが、__class__という表記法はおそらく__init__関数を呼び出すクラスの新しいインスタンスを作成することを指しています。それは正しいのでしょうか? –
これは正確に正しい、yes :)、 '+ ='はクラスのために '__add__'を呼び出します。サブクラスではオーバーライドされません。 – miradulo