Seite 1 von 1

__repr__ von einer Höher gelegenen Klasse verwenden?

Verfasst: Mittwoch 18. April 2007, 15:47
von EnTeQuAk
Hali hallo. Ich habe mal ne Frage. Mit erben geht ja einiges ;) Aber irgentwie bekomme ich folgendes nicht hin:

Ich habe zwei `Token` Klassen. (`TextToken` und `Token` als Basis):

Code: Alles auswählen

class Token(object):
    """
    This class is used for save the token specific data
    (the type and the value).
    """
    def __init__(self, type, value=None, match=None):
        self.type = type
        self.value = value
        self.match = match

    def __repr__(self):
        return '<%s %r>' % (
            self.__class__.__name__,
            ('%s: %s' % (self.type, self.value))
        )

class TextToken(Token):
    def __init__(self, value):
        self.type = 'text'
        self.value = value
Wenn ich nun `__repr__` von `TextToken` aufrufe, ist klar, bekomme ich z.B. folgende Ausgabe:

Code: Alles auswählen

<TextToken u'text: italic'>
Ist es möglich, das ich anstatt von `TextToken` auch `Token` bekomme? Also die ""Hauptklasse""?
(gut, ich könnte einfach `Token` in den __repr__ schreiben, das mag ich aber nicht :)

MfG EnTeQuAk

Verfasst: Mittwoch 18. April 2007, 16:52
von Leonidas
Du kannst in ``TextToken.__repr__`` auch ``Token.__repr__`` aufrufen.

Verfasst: Mittwoch 18. April 2007, 17:01
von EnTeQuAk
joa ;) super Idee.. hi hi :)

Aber wie kann ich die Klasse herausfinden, von der z.B. `TextToken` erbt? (muss ja irgentwie gehen oder?)


MfG EnTeQuAk

Verfasst: Mittwoch 18. April 2007, 17:06
von Leonidas
Entweder du schreibst es einfach hin, indem du die Class-Zeile abliest oder du nutzt ``super()``. Mit ``super(TextToken, self).__repr__()`` in ``TextToken.__repr__()`` sollte das gehen.

Verfasst: Mittwoch 18. April 2007, 17:55
von birkenfeld
Leonidas hat geschrieben:Du kannst in ``TextToken.__repr__`` auch ``Token.__repr__`` aufrufen.
Aber was würde ihm das bringen?

Verfasst: Mittwoch 18. April 2007, 18:13
von Leonidas
birkenfeld hat geschrieben:Aber was würde ihm das bringen?
Er spart sich das Hinschreiben der Parent-Klasse. Keine Ahnung was er damit bezweckt, es war nur eine Antwort auf die Frage "wie kann ich die Klasse herausfinden, von der z.B. `TextToken` erbt?".

Verfasst: Mittwoch 18. April 2007, 19:04
von EnTeQuAk
Keine Ahnung was er damit bezweckt,
Das weiß ich auch nicht so richtig ;)

Ich habs nun anders gelößt ;) Aber ich bin wiedermal um ein klein wenig schlauer geworden ;)

Danke an dich nochma Leonidas!

MfG EnTeQuAk