Objekte indirekt erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
saxopraxo
User
Beiträge: 12
Registriert: Donnerstag 12. November 2020, 19:48

Hallo,

ich bearbeite ein kleines Programm aus einem Fachbuch und habe ein paar Fragen dazu.
Speziell geht es um die Erstellung von Objekten.

Erstellung der Klasse „Fahrzeug“:

class Fahrzeug:
def __init__(self, bez, ge):
self.bezeichnung = bez
self.geschwindigkeit = ge

def beschleunigen(self, wert):
geschwindigkeit+=wert

def __str__(self):
return self.bezeichnung+" "+str(self.geschwindigkeit)+"km/h"

Jetzt erzeuge ich zwei Objekte:

opel = Fahrzeug("Opel Admiral",40)
volvo = Fahrzeug("Volvo Amazon",45)

Jetzt möchte ich allerdings ein weiteres Objekt „fiat“ erstellen.
Allerdings soll der Name der Klasse vom Operator eingegeben werden über „input()“.
z.B:


print(„Name der Automarke eingeben:“)
name=input()

„name“ enthält jetzt die Eingabe „fiat“. Das Objekt müsste dann folgendermaßen angelegt werden.

name=(„Brava“, 50)

Wenn ich es allerdings anzeigen will, dann kommt ein Systemfehler.

print(fiat)

Traceback (most recent call last):
File "C:\Users\User\AppData\Local\Programs\Python\Python38\Klassen_Objekte_5.py", line 28, in <module>
print(fiat)
NameError: name 'fiat' is not defined


Ist das Anlegen eines Objektes, dessen Name über input() eingegeben wird, überhaupt möglich?
Wenn es eine Möglichkeit gibt, wie muss ich das programmieren?

Vielen Dank.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

"name" ist eine Variable und an die bindest du den Rückgabewerte von input - eine Zeichenkette.
Die Namen von Variablen sind nur für den Programmierer wichtig - dem Anwender müssen sie egal sein. In Python werden auf diese Weise keine Variablen dymanisch angelegt.

Schau dir mal die Datenstrukturen - speziell das "dict" bzw. Dictionary an.
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@saxopraxo: Und gewöhne Dir am besten gar nicht erst an so Namen wie `bez` und `ge` zu verwenden. Wenn `bezeichnung` und `geschwindigkeit` gemeint sind, dann sollten die Namen auch genau so heissen und nicht kryptisch abgekürzt werden.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
saxopraxo
User
Beiträge: 12
Registriert: Donnerstag 12. November 2020, 19:48

Hallo Leute, Danke für die Antworten. Das Beispielprogramm habe ich aus "Einstieg in Python" von Thomas Theis. Ich habe es nur gedanklich erweitert, indem man den "Namen" des neuen Objektes mittels "input() eingeben könnte.
Meine Frage nun: ist so eine Konstellation möglich ? So wie "Sparrow" schreibt, kann ich die den Namen "fiat" nicht über input() einlesen, um das Objekt "fiat" anzulegen. Sehe ich das richtig?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Zum Anlegen brauchst Du doch noch viel mehr Informationen als nur den Namen.
Und ja, das geht natürlich, wenn man eine passende Datenstruktur verwendet.

Mit einem Wörterbuch

Code: Alles auswählen

fahrzeuge = {
    "opel": Fahrzeug("Opel Admiral", 40),
    "volvo": Fahrzeug("Volvo Amazon", 45),
}
ist es kein Problem, zu opel und volvo auch einen fiat hinzuzufügen.
Benutzeravatar
noisefloor
User
Beiträge: 4194
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Ist das Anlegen eines Objektes, dessen Name über input() eingegeben wird, überhaupt möglich?
Anlegen nicht, aber du könntest im Nachhinein den Namen im globalen Namensraum ändern. ABER, wie schon gesagt wurde: das ist NICHT der richtig Weg. Du kannst als Programmierer nicht ein Programm schreiben, dessen Variablennamen du selber nicht kennst. Das macht auch keinen Sinn.

Gruß, noisefloor
saxopraxo
User
Beiträge: 12
Registriert: Donnerstag 12. November 2020, 19:48

Danke für die Antworten und Hinweise. Ich werde mich dann mal auf Wörterbuch/Dictionary konzentrieren bei dem was ich machen will.
Antworten