folgende Problemstellung: es soll eine Durchflussrate umgerechnet werden, es gibt fünf mögliche Einheiten. Wenn man den Wert für eine Einheit vorgibt, sollen die anderen vier automatisch berechnet werden.
Mein Ansatz bisher ist über eine DataClass:
Code: Alles auswählen
from dataclasses import dataclass
@dataclass
class Flowrate():
_kg_to_lbs: float = 2.20462262
kg_per_min: int = None
kg_per_h: int = None
t_per_h: int = None
lbs_per_min: int = None
lbs_per_h: int = None
def __post_init__(self):
if self.kg_per_min:
self.kg_per_h = self.kg_per_min * 60
self.t_per_h = self.kg_per_h / 1000
self.lbs_per_min = round(self.kg_per_min * self._kg_to_lbs, 0)
self.lbs_per_h = self.lbs_per_min * 60
if self.kg_per_h:
self.kg_per_min = int(self.kg_per_h / 60)
self.t_per_h = self.kg_per_h / 1000
self.lbs_per_min = round(self.kg_per_min * self._kg_to_lbs, 0)
self.lbs_per_h = self.lbs_per_min * 60
#und so weiter
Code: Alles auswählen
>>> >>> f = Flowrate(kg_per_min = 100)
>>> f
Flowrate(_kg_to_lbs=2.20462262, kg_per_min=100, kg_per_h=6000, t_per_h=6.0, lbs_per_min=220.0, lbs_per_h=13200.0)
Theoretisch sollte man doch setter für jedes Attribut schreiben können, die dann die andere vier Attribute ändern. Wenn das gehen sollte checke ich nicht, wie das geht.
Es muss auch keine DataClass sein, es ginge auch jedes andere Objekt, was die fünf Attribute hat und die Werte neu berechnet, wenn man ein Attribut ändert.
Gruß, noisefloor