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.
Objekte indirekt erstellen
"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.
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.
- __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
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?
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?
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
ist es kein Problem, zu opel und volvo auch einen fiat hinzuzufügen.
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),
}
- noisefloor
- User
- Beiträge: 4194
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Gruß, noisefloor
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.Ist das Anlegen eines Objektes, dessen Name über input() eingegeben wird, überhaupt möglich?
Gruß, noisefloor