日付を含むクラスを書く必要があります。私は日付に日付を追加できるように+演算子をオーバーロードすることになっています。どのように動作するかを説明する:Dateオブジェクトは、年、月、日の形式で(2016,4,15)として表されます。これに整数10を加えると、(2016,4,25)が得られるはずです。 Dateクラスの値はself.year、self.month、self.dayです。Pythonで__add__メソッドを正しくオーバーロードする方法
私の問題は、コードが(Date + 10)と(10 + Date)の形式で動作することになっていることです。また、Date - 1は、負の数の日を追加するという意味で機能するはずです。日付(2016,4,25) - 1は日付(2016,4,24)を返します。
私のコードは、(日付+ 10)の形式で完全に動作しますが、(10 + D)または(D-1)の形式では動作しません。 : - +のためにサポートされていないオペランドのタイプ(S)::: 'INT' と '日'
はTypeErrorためのサポートされていないオペランドのタイプ(複数可)
def __add__(self,value):
if type(self) != int and type(self) != Date or (type(value) != int and type(value) != Date):
raise TypeError
if type(self) == Date:
day = self.day
month = self.month
year = self.year
value = value
if type(value) != int:
raise TypeError
days_to_add = value
while days_to_add > 0:
day+=1
if day == Date.days_in(year,month):
month+=1
if month > 12:
day = 0
month = 1
year+=1
day = 0
days_to_add -=1
return(Date(year,month,day))
これらは私が
TypeError例外を取得エラーです'Date'と 'int'
「__radd__」も実装する必要があります。 – ozgur
http://stackoverflow.com/a/36745772/5320906をご覧ください。減算は '__sub__'と' __rsub__'メソッドを実装する必要がある別の操作です。 – snakecharmerb
私は参照してください。だから私の教授が私に "+演算子を過負荷にする"ように指示すれば、彼は自動的にこれらのメソッドをすべて作成することを意味します。別の言い方をすると、これらのメソッドをすべて実行することによってオーバーロードが定義されますか? –