Warum speichern Sie den Namen der Klassen statt der Klassen selbst?
Sie könnten leicht die Klassen speichern, anstatt der Klassennamen:
classes = [class1, class2]
Und dann verwenden
[cls() for cls in classes]
die Instanzen zu erstellen.
Allerdings dynamische Variablennamen sind selten eine gute Idee, warum nicht in einem Diktat speichern?
d = {name: cls() for name, cls in zip(names, classes)}
Und dann zugreifen d['name_1']
die Instanz für 'name_1'
zu bekommen.
Die Wörterbuchlösung kann auch verwendet werden, wenn Sie die Liste der Klassennamen nicht umgehen können. Sie legen einfach ein Wörterbuch, das Mapping den Namen zu den tatsächlichen Klassen:
name_to_class = {'class_1': class_1, 'class_2': class_2, ...}
d = {name: name_to_class[cls]() for name, cls in zip(names, classes)}
Sie tun könnte es viel einfacher durch globals
oder dergleichen verwendet wird, aber das ist eine wirklich schlechte Gewohnheit und würde alles (ein Sicherheitsrisiko) aus. Die Verwendung eigener Wörterbücher wird im Allgemeinen als "geeigneter" Weg betrachtet.
Es gibt in der Regel bessere Möglichkeiten, was Problem, das es zu lösen ist, dass Sie versuchen zu lösen. Dynamische Variablennamen sind fast nie die richtige Lösung. Gibt es einen Grund, warum Sie die Klassennamen als Strings haben, anstatt eine Liste der tatsächlichen Klassen? Gibt es einen Grund, warum Sie Variablennamen dynamisch erstellen müssen, anstatt die Instanzen in einem dict zu speichern? –
Nachdem ich Ihre Kommentare zu den Antworten gelesen habe, vermute ich, dass dies wahrscheinlich ein [XY-Problem] ist (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Vielleicht möchten Sie eine ** neue ** Frage zum ** echten Problem ** stellen, nicht zu Ihrem ** Versuch **, es zu lösen. :) – MSeifert
Ich versuche, diese Falle zu vermeiden. Ich versuche, alle Klassen von einem Modul sofort zu instanziieren. – GGG