Python-Frage - Objektintialisierung?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
EchterNaivling 
Fragesteller
 24.06.2022, 19:09

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?

0

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})
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
EchterNaivling 
Fragesteller
 25.06.2022, 11:42

Bis jetzt habe ich dies:

def ok_newcar(): # Intialisierung neues Auto
        if int(e2.get()) in carIDlist:
            print('ID bereits vergeben.')
        else:
            print(cars)
            cars.append(car(nameNeu=e1.get(), IDneu=e2.get()))
            print(vars(cars.pop())) # Ausgabe
            print(cars)

Doch es zeigt mir an, dass die Liste "cars" nach und vor dem Intialisieren leer ist.

0
EchterNaivling 
Fragesteller
 25.06.2022, 14:46
@MrAmazing2

Oh...
Danke. Dann muss ich das komplizierter machen, indem ich erst die Liste "umdrehe" und davon das erste Element nehme.

Oder geht das einfacher?

0
MrAmazing2  25.06.2022, 17:23
@EchterNaivling

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]

1