Ich arbeite an einer Simulation eines Clusters von Sonnenkollektoren (ein System/Container). Die Eigenschaften dieses Clusters sind fast eins zu eins mit den Eigenschaften der Elemente - den Panels (Subsystem/enthalten) - über die Anzahl der Elemente pro Cluster verknüpft. Z.B. Die Energieproduktion des Clusters ist einfach die Anzahl der Panels im Cluster mal die Produktion des einzelnen Clusters. Gleiches gilt für die Kosten, das Gewicht usw. Meine Frage ist, wie die Container-Klasse mit der enthaltenen Klasse verknüpft wird.Verknüpfen von Container-Klasseneigenschaften mit enthaltenen Klasseneigenschaften
Lassen Sie mich mit einem naiven Beispiel Ansatz verdeutlichen:
class PanelA(BasePanel):
... _x,_y,_area,_production,etc.
@property
def production(self):
# J/panel/s
return self._area * self._efficiency
... and 20 similar properties
@property
def _technical_detail
class PanelB(BasePanel):
.... similar
class PanelCluster():
....
self.panel = PanelA()
self.density = 100 # panels/ha
@property
def production(self):
# J/ha/h
uc = 60*60 # unit conversion
rho = self.density
production_single_panel = self.panel.production
return uc*rho*production_single_panel
... and e.g. 20 similar constructions
Hinweis, in diesem naiven Ansatz ein Beispiel schreiben würde 20 solche Methoden, die nicht diesem DRY-Prinzip entsprechen.
Was wäre eine bessere Alternative? (Ab) Verwenden Sie getattr?
Zum Beispiel?
Dies scheint bereits mehr "programmatisch", aber vielleicht naiv - wieder. Also frage ich mich, was sind die Optionen und die Vor-/Nachteile davon?
Danke - Ich habe diese Sprachfehler behoben: Sie können mir sagen, dass ich neu bin. – balletpiraat
Willkommen bei Python. Wenn Sie dies noch nicht getan haben, versuchen Sie 'import this' an einer Python-Eingabeaufforderung .. :-) – thebjorn
Ich denke, diese Lösung mit Vererbung würde ähnlich wie das erste Beispiel aussehen, das ich gebe: Sie schreiben (die meisten) alle von die Mappings heraus. Was ist ein expliziter richtiger Weg dazu. Ich bin immer noch neugierig auf alternative Lösungen. – balletpiraat