Hallo,
grundsätzlich würde ich dir empfehlen, wenn du ernsthaft Python lernen willst auf ein Buch zurück zugreifen. Da mir deutschsprachige Bücher lieber sind, empfehle ich dieses hier: https://www.rheinwerk-verlag.de/python-3_4467/
Bevorzugt die PDF Variante, da sich damit leichter nach Schlagwörtern suchen lässt.
Auch so glaube ich, ist das Verständnis von Klassen bei dir noch etwas falsch (ich kann mich natürlich auch irren). Deshalb hier mal ein vereinfachtes Beispiel:
So zunächst eine vereinfachte Darstellung:
class PKW:
def __init__(self, marke, modell):
self.marke = marke # << Variable innerhalb einer Klasse heißt Attribut
self.modell = modell
self.farbe = None
self.geschwindigkeit = 0
def lackieren(self, farbe): # << Funktion innerhalb einer Klasse heißt Methode
self.farbe = farbe
def beschleunigen(self, wert):
self.geschwindigkeit += wert
def bremsen(self, wert):
self.geschwindigkeit -= wert
if self.geschwindigkeit < 0:
self.geschwindigkeit = 0
# Wir bauen 2 Autos, die Klasse ist die Vorlage dafür.
# Variablen in der Klammer von __init__ müssen bei der Instanzierung (das was wir jetzt machen) übergeben werden
# hier wird definiert welche Marke und Modell das Auto hat.
# Dies befindet sich dann in der Instanz, sozusagen dem daraus resultierenden Objekt aus der Vorlage (Klasse)
auto_1 = PKW("VW", "Golf")
auto_2 = PKW("Seat", "Leon")
# Als nächstes werden wir die Autos lackieren, damit sie eine Farbe bekommen, dies kann jetzt für jede Instanz
# (Objekt) unabhängig voneinander gemacht werden
print("Farbe von {} {} ist {}".format(auto_1.marke, auto_1.modell, auto_1.farbe))
print("Farbe von {} {} ist {}".format(auto_2.marke, auto_2.modell, auto_2.farbe))
auto_1.lackieren("weiß")
auto_2.lackieren("schwarz")
print("Farbe von {} {} ist {}".format(auto_1.marke, auto_1.modell, auto_1.farbe))
print("Farbe von {} {} ist {}".format(auto_2.marke, auto_2.modell, auto_2.farbe))
# Weiterführend wird nur noch Auto 1 betrachtet
# wir beschleunigen das Auto um jeweils 5 km/h bis es 30 km/h fährt und bremsen es dann wieder ab
while True:
if auto_1.geschwindigkeit >= 30:
break
else:
auto_1.beschleunigen(5)
print("{} {} fährt aktuell {} km/h".format(auto_1.marke, auto_1.modell, auto_1.geschwindigkeit))
while True:
if auto_1.geschwindigkeit > 0:
auto_1.bremsen(4) # 4 damit das if in der Methode bremsen auch was zu tun bekommt
else:
print("{} {} erfolgreich gebremst".format(auto_1.marke, auto_1.modell))
break
print("{} {} fährt aktuell {} km/h".format(auto_1.marke, auto_1.modell, auto_1.geschwindigkeit))
Alles anzeigen
Da man Code aber nicht wiederholen soll (DRY = Dont repeat yourself), hier auch nochmals eine Funktionalisierte Version:
class PKW:
def __init__(self, marke, modell):
self.marke = marke # << Variable innerhalb einer Klasse heißt Attribut
self.modell = modell
self.farbe = None
self.geschwindigkeit = 0
def lackieren(self, farbe): # << Funktion innerhalb einer Klasse heißt Methode
self.farbe = farbe
def beschleunigen(self, wert):
self.geschwindigkeit += wert
def bremsen(self, wert):
self.geschwindigkeit -= wert
if self.geschwindigkeit < 0:
self.geschwindigkeit = 0
def autofarbe_anzeigen(auto):
print("Farbe von {} {} ist {}".format(auto.marke, auto.modell, auto.farbe))
def auto_beschleunigen_auf_zielgeschwidigkeit(auto, zielgeschwindigkeit):
while True:
if auto.geschwindigkeit >= zielgeschwindigkeit:
break
else:
auto.beschleunigen(5)
print("{} {} fährt aktuell {} km/h".format(auto.marke, auto.modell, auto.geschwindigkeit))
def auto_bremsen_auf_zielgeschwindigkeit(auto, zielgeschwindigkeit):
while True:
if auto.geschwindigkeit > zielgeschwindigkeit:
auto.bremsen(4) # 4 damit das if in der Methode bremsen auch was zu tun bekommt
else:
print("{} {} erfolgreich gebremst".format(auto.marke, auto.modell))
break
print("{} {} fährt aktuell {} km/h".format(auto.marke, auto.modell, auto.geschwindigkeit))
def main():
# Wir bauen 2 Autos, die Klasse ist die Vorlage dafür.
# Variablen in der Klammer von __init__ müssen bei der Instanzierung (das was wir jetzt machen) übergeben werden
# hier wird definiert welche Marke und Modell das Auto hat.
# Dies befindet sich dann in der Instanz, sozusagen dem daraus resultierenden Objekt aus der Vorlage (Klasse)
auto_1 = PKW("VW", "Golf")
auto_2 = PKW("Seat", "Leon")
# Als nächstes werden wir die Autos lackieren, damit sie eine Farbe bekommen, dies kann jetzt für jede Instanz
# (Objekt) unabhängig voneinander gemacht werden
autofarbe_anzeigen(auto_1)
autofarbe_anzeigen(auto_2)
auto_1.lackieren("weiß")
auto_2.lackieren("schwarz")
autofarbe_anzeigen(auto_1)
autofarbe_anzeigen(auto_2)
# Weiterführend wird nur noch Auto 1 betrachtet
# wir beschleunigen das Auto um jeweils 5 km/h bis es 30 km/h fährt und bremsen es dann wieder ab
auto_beschleunigen_auf_zielgeschwidigkeit(auto_1, 30)
auto_bremsen_auf_zielgeschwindigkeit(auto_1, 0)
if __name__ == "__main__":
main()
Alles anzeigen
Zum besseren Verständnis empfiehlt es sich, wenn du dir den Programmablauf in einem Debugger ansiehst.
EDIT: Natürlich lassen sich die Funktionen noch variabler gestalten, aber zur Veranschaulichung wollte ich es nicht zu komplex gestalten.