ich bin mir wieder gar nicht sicher, wie ich meinen Code aufbauen sollen. Es geht wieder um ein Berechnungsprogramm und man kann es vielleicht mit einen Motor wieder ganz gut erklären.
Sagen wir ich will Motoren berechnen, die haben entweder einen Zylinder, zwei Zylinder oder drei. Die werden alle über die gleiche Kurbelwelle angetrieben, können aber unterschiedliche Kolbendurchmesser haben. Verschiedene Kenngrößen des gesamten Motors hängen davon ab wie viele Zylinder der Motor hat und auch ob die Kolbendurchmesser gleich oder unterschiedlich sind.
Ich sehe das so: Egal welche Konfiguration ich habe, ich habe einen Basismotorblock, der hat Attribute wie Drehzahl, Hub, etc. die unabhängig von der Anzahl der Zylinder sind. Dann würde ich eine Klasse "Motorblock" schreiben und eine weitere Klasse "Zylinder" die von "Motorblock" erbt und je nach Anzahl von Zylinder würde ich in meinem Programm dann entsprechend viele Instanzen "Zylinder" erstellen.
Das wäre dann beispielhaft so etwas:
Code: Alles auswählen
#!/usr/bin/env python
from attr import define, field
from math import pi
@define
class MotorBlock:
speed = field()
stroke = field()
@property
def mean_piston_speed(self):
return 2 * self.stroke * 2 * self.speed
@define
class Cylinder(MotorBlock):
piston_diameter = field()
@property
def piston_area(self):
return pi * self.piston_diameter**2 / 4
def main():
input_data = {"speed": 500, "stroke": 120, "pistons": [100, 60]}
cylinders = [
Cylinder(input_data["speed"], input_data["stroke"], piston_diameter)
for piston_diameter in input_data["pistons"]
]
if __name__ == "__main__":
main()
Ich denke alle drei Möglichkeiten funktionieren, nur wenn ich immer eure Code-Beispiele sehe, sieht man da eine klare Struktur und die sind gut erweiterbar. Welche Struktur würdet ihr wählen?
Berechnet werden Kennzahlen die nur die einzelnen Zylinder betreffen, aber auch den gesamten Motor wo die Anzahl und das Zusammenspiel der Zylinder mit einspielt.
Danke und Grüße
Dennis