Hi
Ich habe ein kleines Problem und hoffe Ihr könnt mir helfen.
Ich habe eine List mit Klassennamen, wobei ein Name nach bestimmten Bedingungen ausgesucht und dann eine Instanz dieser Klasse erzeugt werden soll.
Funktioniert das in Python eigentlich und wenn ja wie?
Instanz einer Klasse dynamisch erzeugen
Klar geht das:
Oder wenn du nur die Namen hast, dann kannst du auch "getattr(modul, classname)" verwenden.
Code: Alles auswählen
>>> class A(object): pass
>>> class B(object): pass
>>> class C(object): pass
>>> alist = [A, B, C]
>>> def find_by_name(alist, name):
for cls in alist:
if cls.__name__ == name:
return cls
>>> find_by_name(alist, "A")
<class '__main__.A'>
Statt linear in einer Liste zu suchen, könnte man sich auch ein Wörterbuch anlegen, das Namen auf Klassenobjekte abbildet.
@smith0815: Ein bisschen Hintergrund-Informationen darüber, was genau Du erreichen möchtest, wären sinnvoll.
ich habe eine Liste von Klassennamen
classnames("class1", "class2", "class3", usw.)
jenach dem wie die entsprechende Bedingung lautet, sollen halt 2 Objekte von Ersten, 4 vom Zweiten, usw. erzeugt werden.
Diese werden dann später entsprechend der Bedingung zusammen gefügt und da ich die genaue Menge der einzelnen benötigten Objekte nicht kenne wollte ich sie dynamisch erzeugen.
ich kann natürlich auch eine Funktion schreiben, aber ich dachte es geht wie so oft auch viel einfacher.
classnames("class1", "class2", "class3", usw.)
jenach dem wie die entsprechende Bedingung lautet, sollen halt 2 Objekte von Ersten, 4 vom Zweiten, usw. erzeugt werden.
Diese werden dann später entsprechend der Bedingung zusammen gefügt und da ich die genaue Menge der einzelnen benötigten Objekte nicht kenne wollte ich sie dynamisch erzeugen.
ich kann natürlich auch eine Funktion schreiben, aber ich dachte es geht wie so oft auch viel einfacher.
Wenn Du eine feste Liste von Klassennamen hast, dann kannst Du daraus auch ebenso gut eine Abbildung von Klassennamen zu den zugeordneten Klassen in Form eines Wörterbuchs erzeugen. Wie viele Exemplare einer einzelnen Klasse man dann nachher erzeugt, ist davon ja völlig unabhängig, wo also ist das Problem?
Code: Alles auswählen
class Spam(object):
pass
class Eggs(object:
pass
name2class = {'spam': Spam, 'eggs': Eggs}
spam = name2class['spam']()
eggs = [name2class['eggs']() for _ in xrange(10)]