Python-Vererbung: Verketten mit super __str__
Ich würde gerne eine Kind-Klasse' __str__
Implementierung hinzufügen, um die Basis-Implementierung:
class A:
def __str__(self):
return "this"
class B(A):
def __str__(self):
return super(B, self) + " + that"
Daraus ergibt sich jedoch eine Art Fehler:
TypeError: unsupported operand type(s) for +: 'super' und 'str'
Gibt es eine Möglichkeit zu bekommen str(B())
zurück "this + that"
?
- Nicht, dass dies Ihr Problem ist, aber in Python 3 können Sie nur schreiben
super()
entfällt die Notwendigkeit, die alten 2.x syntaxsuper(B, self)
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie tun
super(B, self).__str__()
.super
bezieht sich auf die übergeordnete Klasse; Sie sind nicht durch Aufruf einer der Methoden.super().__str__()
ist viel klarer und kürzer.Für python 2, wie andere geschrieben haben.
Für python 3 ist die syntax vereinfacht.
super
erfordert keine Argumente, um korrekt zu arbeiten.Hier einige code. Was Sie brauchte war
1) - Unterklasse-Objekt, so dass das super funktioniert wie erwartet, und
2) Verwenden
__str__()
bei der Verkettung von Strings.Hinweis:
print B()
Anrufeb.__str__()
unter der Haube.Klasse B sein sollte: