Das macht man aber nicht mit id sonder mit repr. Identität != Typ.keppla hat geschrieben: Ich hatte das so aus der Beschreibung rausgelesen (welches objekt an einen namen gebunden ist).
``id`` gibt mir einen kollisionsfreihen (Also wirklich einzigartige) Numerischen Wert zurück. Das ist die Identität des Objektes (BZW. Des namen der an Objekt X gebundene ist.).
Code: Alles auswählen
blex = BasisLexer("**//test**")
print id(blex) #id: 10374384
Was ist ``blex2``? Ist es das das instanziierte Objekt der Klasse ``BasisLexer`` oder ist es nur die Referenz auf ``blex``?
Code: Alles auswählen
ref_blex = blex2
print id(blex2) #id: 10374384
print id(ref_blex) #id: 10374384
# ref_blex == blex2
Wie auch immer, es sollte nun klar sein worauf ich hinaus wollte.
...
So eine ``id`` bringt mich nicht wirklich weiter. Ich kann damit nur herausfinden das zwei Namen auf die gleiche Speicheradresse zeigen (Oder besser gesagt auf den gleichen Inhalt). -- Es ist also gerade brauchbar um zu testen ob zwei Objekte die gleiche Identität haben. Und wie oft muss man sowas testen?
Wie BlackJack schon sagt, für mich ist es relevant welche Werte ein Name hat und an welches Objekt es gebunden ist. Das alles kann ich mit ``repr`` rausfinden (Wenn ich ``__repr__`` selber Sinnvoll überladen habe):
Code: Alles auswählen
src = """** test **"""
dwlex = DauCMSWikiLexer(src)
print repr(dwlex)
Code: Alles auswählen
<dcmswlex.DauCMSWikiLexer: [[('MARKUP_BOLD', None), ('LITERAL', ' test '), ('MARKUP_BOLD', None)]]>
Code: Alles auswählen
def __repr__(self):
return "<%s.%s: %r @ ID: %d>" % (
_NAME_OF_THIS_MODULE, self.__class__.__name__, self._token_stream,
id(self)
)
Code: Alles auswählen
<dcmswlex.DauWikiLexer: [[('MARKUP_BOLD', None), ('LITERAL', ' test '), ('MARKUP_BOLD', None)]] @ ID: 10373328>
Wenn mich nur der Wert interessiert (Und ich ``__str__`` überladen habe), genügt nur ein einfaches ``print dwlex``.
Fazit für mich: Die Überladung von ``__repr__`` ist für mich genauso unersätzlich wie die Überladung von ``__str__``. ``repr()`` nutze ich ziemlich oft, wohingegen ich ``id`` so gut wie garnicht brauche.
lg