Ich habe eine Klasse namens Variable definiert als:
%Vor%Ich möchte 26 einzelne Großbuchstaben-Instanzen der Variablen wie folgt erstellen:
%Vor%Bisher habe ich verschiedene Lösungen ausprobiert, und das Beste, was ich mir ausgedacht habe, ist:
%Vor%Dies läuft jedoch nicht und gibt mir diesen Fehler:
%Vor%Was mache ich falsch?
Ob das eine gute Idee ist, bleibt fraglich:)
Dies funktioniert nur für globals()
(d. h. Modulebenezuweisungen), da die Sprachdefinition explizit angibt, dass das Ändern des von locals()
zurückgegebenen Wörterbuchs den Wert lokaler Variablen möglicherweise nicht ändert.
Sie können auch etwas ähnliches mit dem __dict__
einer Klasse oder Instanz tun.
Der mit Abstand sauberste Ansatz, den ich je gesehen habe, ist, Variablen (dh Attribute) direkt zu Ihrem Programm (dh dem Hauptmodul) hinzuzufügen, wie in eine andere Frage zu StackOverflow :
%Vor% PS : Python-Core-Entwickler haben hart gearbeitet, um das Ändern von globals()
zu ermöglichen (siehe Kommentare zu ncoghlans Antwort). Daher ist die Änderung von globals()
eine Alternative. Ich bin mir nicht sicher, warum viele Leute das Gefühl haben, dass es nicht so sauber ist (vielleicht, weil die Tatsache, dass globals()
geändert werden kann, nicht explizit dokumentiert wird?).
Sie müssen dafür nicht exec
verwenden, wie die anderen Antworten zeigen, aber hier ist das Problem mit Ihrem ursprünglichen Code:
Dies wird A = A
, B = B
usw. ausführen. Das mag zwar interessant sein, wenn Sie ein glühender Anhänger des Objektivismus sind, Python wird sich nicht allzu viel dafür interessieren.
Sie möchten das Variable()
sachen in der exec haben, damit es wichtig ist:
Wenn Sie in Zukunft exec
verwenden möchten, versuchen Sie es zunächst nicht. Zweitens, drucken Sie was Sie ausführen - das wird helfen, zu debuggen.
Versuchen Sie nicht, dies in eine globale Variable einzubauen. Es ist schrecklich. Tun Sie dies stattdessen.
%Vor% Sie greifen beispielsweise von variables['Q']
darauf zu.
Wenn Sie Attributzugriff wünschen, können Sie Folgendes tun:
%Vor%und
%Vor%Aber in diesem Fall würde ich lieber dynamisch in einer Variablen-Containerklasse erstellen.
%Vor%Verwendung:
%Vor%Einfach und sauber, keine hässlichen Hacks (gut, außer einem getattr, und es ist nicht so hässlich), und Sie müssen nicht einmal die Variablen machen, die Sie nicht brauchen.
Tags und Links python