meinObjekt anstelle von meinObjekt.name benutzen?

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.
Antworten
Benutzeravatar
Goswin
User
Beiträge: 363
Registriert: Freitag 8. Dezember 2006, 11:47
Wohnort: Ulm-Böfingen
Kontaktdaten:

Einige größere Objekte von mir haben eindeutige Namen, die auch in __str__ verwendet werden. Bisher habe ich diese Objekte verschiedene Male als Keys in Dictionaries eingesetzt, und dabei stets Ausdrücke wie

Code: Alles auswählen

daten = {}
daten[obja.name, objb.name] = was_immer_ich_hier_brauche
Ich bemerke nun plötzlich, dass das Programm ebenfalls richtig durchläuft, wenn ich einfach nur folgendes schreibe:

Code: Alles auswählen

daten[obja, objb] = was_immer_ich_hier_brauche
Hatte ich mir vorher das Leben unnötigerweise kompliziert gemacht oder ist diese zweite Alternative in irgendeinem Sinn deutlich schlechter als die erste? (Ich staune immer noch darüber, dass diese Objekte überhaupt als Keys verwendbar sind)
BlackJack

`dict()` (und `set()`) verwenden Vergleiche und den Hashwert eines Objekts. Wenn also `__eq__()` oder `__cmp__()` und `__hash__()` so implementiert sind, dass sie zusammen passen, kann man die Objekte als Schlüssel verwenden.

Es muss sicher gestellt sein, dass aus ``a == b`` immer folgt, dass ``hash(a) == hash(b)`` gilt.

Wenn man weder `__eq__()` oder `__cmp__()`, oder `__hash__()` überschreibt, gilt diese Voraussetzung. Die CPython Implementierung verwendet dann AFAIK sowohl für den Vergleich als auch den Hashwert die Objektidentität.
Antworten