Richtig! Und die beiden Klassenobjekte heißen A bzw. e (auch wenn das nicht unbedingt zur Ausgangsfrage gehört, aber das hatte er ja nicht gefragt). Die Frage ist doch aber: ist eine Referenz auf ein Objekt eine Einbahnstraße? Kann ich, wenn ich ein Objekt habe, rausfinden, wo oder von wem oder wie es referenziert wird? Gerade der gc müsste sowas doch können, oder? Teilweise geht es ja, wie schon gezeigt wurde.
Hatten wir nicht schonmal so eine Diskussion mit der Frage, ob die Schachtel weiß in welcher Schublade sie steckt? Gut die Schachtel scheint es in diesem Fall nicht zu wissen, weil es ja keine Objekteigenschaft ist, aber vielleicht kann man es trotzdem irgendwie rausfinden. Ich schau mir den gc nochmal an. Ich wüsste nicht, warum ich Skrupel haben sollte den einzusetzen.
alle instanzen einer klasse auflisten
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
So etwas z.B.:netzmensch hat geschrieben:und was würdest du dann als alternative bezeichnen?birkenfeld hat geschrieben:
Als sauber würde ich das nicht bezeichnen. Den GC betrachte ich eher als Implementationsdetail, auf den ich mich nicht verlassen will.
Code: Alles auswählen
class A(object):
instances = []
def __new__(cls, *args, **kwds):
instance = object.__new__(cls, *args, **kwds)
A.instances.append(instance)
return instance
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Das kannst du ja auch machen. Nur es dazu zu missbrauchen, irgendwelche Namen von Objekten herauszufinden, ist sinnlos, gerade weil diese Namen immer nur im Kontext eines bestimmten Namensraums gültig sind. Andere Objekte haben, wie demonstriert, gar keinen Namen.N317V hat geschrieben:Richtig! Und die beiden Klassenobjekte heißen A bzw. e (auch wenn das nicht unbedingt zur Ausgangsfrage gehört, aber das hatte er ja nicht gefragt). Die Frage ist doch aber: ist eine Referenz auf ein Objekt eine Einbahnstraße? Kann ich, wenn ich ein Objekt habe, rausfinden, wo oder von wem oder wie es referenziert wird? Gerade der gc müsste sowas doch können, oder? Teilweise geht es ja, wie schon gezeigt wurde.
Code: Alles auswählen
a = []
b = {}
x = object() # (*)
x.a = b
x.b = a
Dein vorhin geposteter Code funktioniert z.B. nur mit Instanzen, die im selben Modul-Namensraum wie die Klasse definiert werden.
(*) Ja, ich weiß, dass man Instanzen von object nicht einfach Attribute zuweisen kann, das spielt aber hier keine Rolle.
Ihn für seinen Zweck einzusetzen ist sinnvoll. Ihn für etwas einsetzen zu wollen, was sinnlos ist, ist sinnlos.Hatten wir nicht schonmal so eine Diskussion mit der Frage, ob die Schachtel weiß in welcher Schublade sie steckt? Gut die Schachtel scheint es in diesem Fall nicht zu wissen, weil es ja keine Objekteigenschaft ist, aber vielleicht kann man es trotzdem irgendwie rausfinden. Ich schau mir den gc nochmal an. Ich wüsste nicht, warum ich Skrupel haben sollte den einzusetzen.
Andersrum, ich hab <list object at 0x011493C8> und will wissen wie darauf referenziert wird und die Antwort ist ja wohl ganz klar: a und x.bbirkenfeld hat geschrieben:Jetzt versuch mal herauszubekommen, was "a" ist.Code: Alles auswählen
a = [] b = {} x = object() # (*) x.a = b x.b = a
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Diese Antwort programmatisch zu geben, wird dir aber schwerfallen.N317V hat geschrieben:Andersrum, ich hab <list object at 0x011493C8> und will wissen wie darauf referenziert wird und die Antwort ist ja wohl ganz klar: a und x.bbirkenfeld hat geschrieben:Jetzt versuch mal herauszubekommen, was "a" ist.Code: Alles auswählen
a = [] b = {} x = object() # (*) x.a = b x.b = a
Tut es auch. Richtig schwer sogar. Darum frag ich ja.birkenfeld hat geschrieben:Diese Antwort programmatisch zu geben, wird dir aber schwerfallen.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt