Python-Frage - Objektintialisierung?
Hallo.
Wie lege ich in Python den Objektnamen in einer Eingabe fest?
eingabe = input()
# neues Objekt
ding = KlasseDing()
Wie ersetze ich "ding" durch "eingabe", sodass ich den Namen eingeben kann?
Mein Projekt:
Ein Programm, mit dem ich Objekte grafisch erzeuge und speichere.
Ich weiße dann verschiedene Attribute zu, wie auch den Name ("eingabe"):
Ist das so möglich? Wenn ja, wie?
Viele Grüße,
euer EchterNaivling
2 Antworten
Ich weiß zwar nicht was du vorhast, aber ein Dictionary könnte die Lösung sein.
Aber falls du - warum auch immer- wirklich einen dynamischen Variablennamen brauchst, folgende Möglichkeiten gibt es:
1. Mit exec():
exec(eingabe + "=KlasseDing()")
Warnung: Sehr unsicher, man kann hier Code injecten.
2. locals ändern:
locals()[eingabe] = KlasseDing()
Funktioniert nicht innerhalb einer Methode.
3. globals ändern:
globals()[eingabe] = KlasseDing()
Legt eine globale Variable an -> Bad Practice
Aber das sollte man am besten alles nicht machen. Wenn du sagst, was genau du vorhast, findet sich sicher eine bessere Lösung.
Hallo. Ich habe den Teil mit dem dich anschreiben leider zu spät gelesen.
Eine Ergänzung meiner Frage findest (bald) du oben.
Kannst du mir helfen?
Was du hier machst, kann man mit einem Dictionary - oder noch besser, mit Klassen - lösen. Man erstellt dann einfach für jedes Objekt ein neues Dictionary oder ein neues Objekt dieser Klasse. Das fügt man dann am besten in eine Liste ein.
Beispiel mit Dict-Objekten:
autos = []
Wenn Auto erzeugt wird:
carName = ... # Aus UI einlesen
carID = ... # Aus UI einlesen
autos.append({"name": carName, "id": carID})
Schon klar, pop() entfernt das Element nämlich aus der Liste :D
Oh...
Danke. Dann muss ich das komplizierter machen, indem ich erst die Liste "umdrehe" und davon das erste Element nehme.
Oder geht das einfacher?
Nene, Liste umdrehen ist viel zu kompliziert und ineffektiv :D
Mit negativen Indexen kannst du von hinten her auf die Elemente zugreifen. So bekommst du das letzte Element:
cars[-1]
Geht aber nur in Python. In anderen Sprachen würde man mithilfe der Länge des Arrays auf das letzte Elemente zugreifen:
cars[cars.length - 1]
Bis jetzt habe ich dies:
Doch es zeigt mir an, dass die Liste "cars" nach und vor dem Intialisieren leer ist.