Code: Alles auswählen
from typing import Protocol
class Zylinder:
def __init__(self,hoehe,breite,tiefe):
self.hoehe = hoehe
self.breite = breite
self.tiefe = tiefe
class Motor:
def __init__(self,leistung,gas):
self.leistung = leistung
self.gas = gas
class OttoMotor(Motor):
def __init__(self,leistung):
Motor.__init__(self,leistung,'Benzin')
class DieselMotor(Motor):
def __init__(self,leistung):
Motor.__init__(self,leistung,'Diesel')
class MotorFactory:
def __new__(self,motor,zylinder,anzahl_zylinder):
self.motor = motor
self.motor.zylinder = zylinder
self.motor.anzahl_zylinder = anzahl_zylinder
return motor
class MotorBerechnung(Protocol):
def beschleunigung_auf_100(self): pass
class OttoMotorBerechnung(MotorBerechnung):
otto_faktor = 0.0000321
def beschleunigung_auf_100(self):
volumen_zylinder=self.motor.zylinder.hoehe*self.motor.zylinder.breite*self.motor.zylinder.tiefe
return volumen_zylinder*self.motor.anzahl_zylinder*self.motor.leistung*self.otto_faktor
class DieselMotorBerechnung(MotorBerechnung):
diesel_faktor = 0.0000432
def beschleunigung_auf_100(self):
volumen_zylinder=self.motor.zylinder.hoehe*self.motor.zylinder.breite*self.motor.zylinder.tiefe
return volumen_zylinder*self.motor.anzahl_zylinder*self.motor.leistung*self.diesel_faktor
class OttoMotorZylinder(OttoMotor,OttoMotorBerechnung):
def __init__(self,otto_motor):
self.motor = otto_motor
def __str__(self):
return f"Otto Motor {self.motor.anzahl_zylinder} Zylinder"
class DieselMotorZylinder(DieselMotor,DieselMotorBerechnung):
def __init__(self,diesel_motor):
self.motor = diesel_motor
def __str__(self):
return f"Diesel Motor {self.motor.anzahl_zylinder} Zylinder"
if __name__ == "__main__":
zylinder = Zylinder(10,10,10)
otto_motor_3_zylinder = OttoMotorZylinder(MotorFactory(OttoMotor(100),zylinder,3))
print(f"{otto_motor_3_zylinder} [Treibstoff: {otto_motor_3_zylinder.motor.gas}] mit {otto_motor_3_zylinder.motor.leistung}PS von 0 auf 100: {otto_motor_3_zylinder.beschleunigung_auf_100():.2f}s")
diesel_motor_3_zylinder = DieselMotorZylinder(MotorFactory(DieselMotor(100),zylinder,3))
print(f"{diesel_motor_3_zylinder} [Treibstoff: {diesel_motor_3_zylinder.motor.gas}] mit {diesel_motor_3_zylinder.motor.leistung}PS von 0 auf 100: {diesel_motor_3_zylinder.beschleunigung_auf_100():.2f}s")
Wie sinnvoll das hier ist, lässt wie immer in der OOP Freiraum für Diskussionen..Otto Motor 3 Zylinder [Treibstoff: Benzin] mit 100PS von 0 auf 100: 9.63s
Diesel Motor 3 Zylinder [Treibstoff: Diesel] mit 100PS von 0 auf 100: 12.96s