Sono obbligato a scrivere una classe che coinvolge le date. Dovrei sovraccaricare l'operatore + per consentire l'aggiunta di giorni alle date. Per spiegare come funziona: Un oggetto Date è rappresentato come (2016, 4, 15) nel formato anno, mese, data. L'aggiunta di un intero 10 a questo dovrebbe produrre (2016, 4, 25). La classe Date ha valori self.year, self.month, self.daycome sovraccaricare correttamente il metodo __add__ in python
Il mio problema è che il codice dovrebbe funzionare nel modulo (Data + 10) e (10 + Data). Anche Date - 1. dovrebbe funzionare nel senso di aggiungere un numero negativo di giorni. Data (2016, 4, 25) - 1 Data di restituzione (2016, 4, 24).
Il mio codice funziona perfettamente nella forma di (Data + 10) ma non nel formato (10 + D) o (D-1).
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))
Questi sono gli errori ottengo
TypeError: tipo di operando non supportato (s) per +: 'int' e 'Data'
TypeError: tipo di operando non supportato (s) per -: 'Data' e 'int'
È necessario implementare anche '__radd__'. – ozgur
Dai un'occhiata a http://stackoverflow.com/a/36745772/5320906. La sottrazione è un'operazione separata per la quale è necessario implementare i metodi '__sub__' e' __rsub__'. – snakecharmerb
Capisco. Quindi se il mio professore mi istruisce a "sovraccaricare l'operatore +", automaticamente intende creare tutti questi metodi? O per dirla in altro modo, l'overloading è definito facendo tutti questi metodi? –