__repr__ von einer Höher gelegenen Klasse verwenden?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

__repr__ von einer Höher gelegenen Klasse verwenden?

Beitragvon EnTeQuAk » Mittwoch 18. April 2007, 15:47

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 18. April 2007, 16:52

Du kannst in ``TextToken.__repr__`` auch ``Token.__repr__`` aufrufen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Mittwoch 18. April 2007, 17:01

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 18. April 2007, 17:06

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Mittwoch 18. April 2007, 17:55

Leonidas hat geschrieben:Du kannst in ``TextToken.__repr__`` auch ``Token.__repr__`` aufrufen.


Aber was würde ihm das bringen?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 18. April 2007, 18:13

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?".
My god, it's full of CARs! | Leonidasvoice vs Modvoice
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Mittwoch 18. April 2007, 19:04

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]