Sie können nicht. Die Erstellung eines Objekts ist völlig unabhängig davon, ob einer benannten Variablen eine Referenz auf dieses Objekt zugewiesen wird.
foo().doSomething()
- eine Instanz von foo ist an keinen Namen gebunden und wird wahrscheinlich direkt nach dem Aufruf mit Müll versorgt.
a[1].moo = foo()
- wie lautet der Name?
a = foo()
b = a # is name of foo 'a' or 'b'? both point to the same instance
a = None # but 'a' is gone, so now the name is 'b'?..
OTOH, ist einen Namen für den Konstruktor schmerzlos:
my_foos = {}
for name in ('a', 'b', 'c'):
my_foos[name] = foo(name)
Sie können sogar eine Instanz Attribut unsanft zuweisen, wenn Sie den Konstruktor aus irgendeinem Grund nicht ändern wird:
my_foos = {}
for name in ('a', 'b', 'c'):
a_foo = foo()
a_foo.my_mame = name # here
my_foos[name] = a_foo
Und wenn Sie in der dunklen Seite sind, können Sie schließlich Ihre Foos globalen Namespace hinzufügen: globals().update(my_foos)
- jetzt haben Sie globale Namen a
, b
und c
, die sich jeweils auf einen passend genannten foo beziehen.
Und um ihrer selbst willen foo, nennen Sie Ihre Klassen mit einem Großanfangsbuchstaben :)
Was ist das Verhalten, wenn Sie tun: bar (foo())? – carl
Dies ist sehr schwierig in irgendeiner sinnvollen Weise zu tun. Für eine einfache Zuweisung sollte [this] (http://stackoverflow.com/questions/3744792/accessing-the-name-that-an- object-being-created -is-assigned-to/4190682#4190682) funktionieren. Es wird für etwas kompliziertes obwohl brechen. – aaronasterling