richtig überladen Ich bin verpflichtet, eine Klasse mit Daten zu schreiben. Ich sollte den Operator + überladen, um zu erlauben, dass Tage zu Daten hinzugefügt werden. Um zu erklären, wie es funktioniert: Ein Date-Objekt wird als (2016, 4, 15) im Format Jahr, Monat, Datum dargestellt. Adding Integer 10 zu diesem sollte (2016,4,25) ergeben. Die Date-Klasse hat Werte self.year, self.month, self.dayWie die __add__ Methode in Python
Mein Problem ist, dass der Code in der Form (Date + 10) sowie (10 + Date) funktionieren soll. Auch Datum - 1. sollte in dem Sinne funktionieren, dass eine negative Anzahl von Tagen hinzugefügt wird. Datum (2016,4,25) - 1 gibt das Datum (2016,4,24) zurück.
Mein Code funktioniert perfekt in Form von (Datum + 10), aber nicht in der Form (10 + D) oder (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))
Dies sind die Fehler, die ich
Typeerror erhalten: nicht unterstützte Operandtyp (e) für +: 'int' und 'Datum'
Typeerror: nicht unterstützte Operandtyp (e) für: - 'Datum' und 'Int'
Sie müssen auch '__radd__' implementieren. – ozgur
Werfen Sie einen Blick auf http://stackoverflow.com/a/36745772/5320906. Subtraktion ist eine separate Operation, für die Sie die Methoden "__sub__" und "__rsub__" implementieren müssen. – snakecharmerb
Ich sehe. Wenn mein Professor mich anweist, den + Operator zu überladen, bedeutet das automatisch, alle diese Methoden zu erstellen? Oder, um es anders auszudrücken, Überlastung wird durch all diese Methoden definiert. –