Funktionale Programmierung ist dazu gedacht, externe Eingaben weiterzuverarbeiten. Das ist bei dir nicht möglich, da deine Funktionen keinerlei Parameter eingebaut haben.
Ich habe dir neben "fill_up()" explizit beschrieben, dass dies die Tätigkeit des Auffüllens beschreibt. Der Name der Funktion beschreibt also deren Sinn, wenn man so will (Stichwort: "sprechende Namen"). Bei dir tut sie etwas ganz anderes: Sie gibt die Kraftstoffart zurück. Folglich müsste sie "get_fueltype()" heißen. Zudem handelt es sich bei der Funktion um einen sogenannten Getter (da rächt es sich, dass ich mit schlechtem Beispiel voran gegangen bin). Das heißt: Du gibst ein Attribut zurück, dessen Wert man auch direkt über "self.fueltype" erhalten kann. Dieser zusätzliche Schritt ist schlichtweg unnötig.
Zum Auto: Während du den Kraftstofftyp korrekterweise in den Konstruktor setzt, baust die Art des Öls gesondert in "putoil()" ein. Abgesehen davon, dass es auch hier nicht um's Einfüllen des Öls, sondern vielmehr um "set_oiltype()" geht, könntest du ja hier zu Übung mal mit Parametern arbeiten:
Code: Alles auswählen
def set_oiltype(self, oiltype):
if oiltype == 'motoroil':
self.oil = True # dann muss self.oil aber vorher "False" statt "None" sein
else:
return "I won't drink that"
Zum Schluss würde ich auch wieder "driving()" entsprechend umbennen. Schliesslich geht es ja erst einmal um die Fahrtüchtigkeit des Autos. Das eigentliche Losfahren übernimmt die Funktion "drive()". Das if-Statement macht übrigens herzlich wenig Sinn, da bei deiner Klasse ohnehin kein anderer Wert als "Benzin" angenommen werden kann und in der jetzigen Form auch kein anderer Wert als "Standart Oel".
Ich hoffe du kannst durch die Kritik etwas für deine zukünftigen Klassen mitnehmen.
Sebastian