statt Programmieren gehe ich im Moment mal wieder meiner Lieblingsbeschäftigung nach, zu analysieren, warum manche Dinge so sind wie sie sind - und ich sie nicht verstehe. In einem älteren thread - nämlich hier: viewtopic.php?t=54719 - geht es um folgende Codeschnipsel:
Code: Alles auswählen
def __repr__(self):
return (
f"{self.__class__.__name__}"
f"({self.project!r}, {self.date!r}, {self.start!r}, {self.stop!r})"
)
def __str__(self):
return self.DELIMITER.join(
[self.project, self.date, self.start, self.stop]
)
Leider bis heute nicht richtig kapiert. In der Doku steht dazu, dass __str__ von str() oder print() verwendet wird, und __reper__ von repr(). Soweit sogut. Weiterhin steht da, dass __repr__ eigentlich nur zu Debug-Zwecken verwendet wird , weil es gegenüber __str__ erweiterte informationen liefert.Entry.__repr__()` wird von `list.__repr__()` benutzt, das wiederum von `list.__str__()` verwendet wird, das vom `print()` verwendet wird das in der letzten Zeile von `main()` steht.
In Deinem Antwortsatz steht aber, dass das jeweils eine von dem anderen benutzt wird. Dazu habe ich keinen Hinweis gefunden, oder es halt nicht richtig kapiert, was Du meinst. Wo kann man das nachlesen, dass Entry__repr__() von list.__repr__() benutzt wird, oder besser, ich habe bei list keinerlei Hinweis auf __repr__ gefunden. Ebenso keinen Hinweis, dass __list__.str() von list.__repr() benutzt wird, in der Doku werden diese Dinge komplett auseinander gehalten.
Ebenso die Frage, wieso überhaupt die special methods hinter den eigentlichen Methoden liegen, also warum nicht gleich repr() neu definieren, anstatt __repr__ ?
Und warum steht das !r da drin, wo wir uns doch sowieso innerhalb der __repr__ methode befinden?
Wie (und warum) geht man grundsätzlich mit diesen Methoden um, z.B. mit __mul__ ? Sind diese (mathematischen) methoden z.B. nur dazu da, um z.B. ähnlich C++ die Operatoren zu überladen?
Danke und Gruß