Seite 1 von 1

Instanzen einer bestimmten Klasse

Verfasst: Donnerstag 11. Juni 2009, 07:36
von pytino
Hallo zusammen

Ich habe mehrere Objekte von Klassen angelegt und möchte jetzt herausfinden welche Instanzen zu einer bestimmten Klasse gehören.

Ich hoffe jemand hat mir da einen Tipp.

Gruss aus der Schweiz

Tino

Verfasst: Donnerstag 11. Juni 2009, 07:46
von BlackJack
Das ginge über das `__class__`-Attribut, aber warum möchtest Du das denn wissen?

Verfasst: Donnerstag 11. Juni 2009, 08:46
von pytino
Hallo BlackJack

Hmm, da muss ich ja schon eine Instanz angeben...
Instanz.__class__ oder?
Ich möchte aber gerne alle Instanzen einer bestimmten Klasse herausfinden.

Ich hoffe du verstehst mein anliegen.

Gruss

Tino

Verfasst: Donnerstag 11. Juni 2009, 08:50
von Dill
du musst in der klasse buch führen welche instanzen erstellt worden sind.
von haus aus geht das nicht. (natürlich geht das irgendwie, aber auf gruseligste art+weis)

Verfasst: Donnerstag 11. Juni 2009, 09:21
von BlackJack
Und es ist immer noch die Frage nach dem "warum" offen. Alle Exemplare möchte man in der Regel ja auch gar nicht haben, sondern nur eine bestimmte Gruppe. Und die sollte man sich halt explizit irgendwo merken.

Verfasst: Donnerstag 11. Juni 2009, 09:29
von pytino
@BlackJack: habe mal darüber nachgedacht. In Java gibt es ja sogenannte Reflections. Da habe ich gedacht wie/ob das in Python funktionieren könnte.

@Dill: Wei währe das zu implementieren?

Verfasst: Donnerstag 11. Juni 2009, 09:34
von Dill
du machst dir eine liste als klassenattribut und hängst in __init__ self (die instanz) an die liste an. mit reflections geht das auch in python, aber warum sollte man das tun? wie das implementiert wird kann ich dir nicht sagen.

Verfasst: Donnerstag 11. Juni 2009, 10:01
von BlackJack
@pytino: Ich glaube nicht, dass das in Java eine gute Idee ist, denn auch dort gibt es AFAIK keine Verbindung von Klassen zu Exemplaren, d.h. auch dort müsste man sich *alle* Exemplare anschauen, die in der VM existieren, und die herausfiltern, welche von einem bestimmten Typ sind. Das ist höchst ineffizient.

Verfasst: Donnerstag 11. Juni 2009, 10:18
von Leonidas
Erstens heißt das Ding in Java Reflection und zweitens könnte man das in Python mit Metaklassen und Weakrefs relativ elegant lösen. Ich stimme aber BlackJack zu, dass das eigentlich eher eine Spielerei denn eine gültige Lösung für ein reales Problem ist.

Verfasst: Donnerstag 11. Juni 2009, 13:23
von sma
Sucht pytino nicht einfach nur `isinstance(my_object, MyClass)`?

Stefan

Verfasst: Donnerstag 11. Juni 2009, 13:33
von Dill
nein, siehe 3. beitrag. :idea:

Verfasst: Donnerstag 11. Juni 2009, 14:27
von sma
Auch so. Überlesen. Dann nur so viel: 15 Jahre OO-Erfahrung haben gezeigt, dass die Frage nach einer Möglichkeit, alle Exemplare einer Klasse aufzählen zu wollen, eigentlich immer ein Indiz für ein schlechtes Design ist und man zunächst einmal die richtige Frage finden muss.

Stefan