私は、太陽電池パネルのクラスタ(システム/コンテナ)のシミュレーションを行っています。このクラスターのプロパティーは、クラスターごとの要素数を介して、要素(パネル(サブシステム/含まれている))のプロパティーにほぼ1対1でリンクされています。例えば。クラスタのエネルギー生産は、単にクラスタ内のパネルの数と単一のクラスタの生産との間の数である。コスト、重量などと同じです。私の質問は、コンテナクラスと含まれるクラスをリンクする方法です。 1は、例えば記述し、この単純なアプローチでは、コンテナのクラスプロパティを含むクラスプロパティにリンクする
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
注:
私は単純な手法例で説明しましょうこのDRY原理に合致していないような20の方法。
もっと良い選択肢は何ですか? (Ab)getattrを使用しますか?
たとえば、
class Panel():
unit = {'production':'J/panel/s'}
class PanelCluster():
panel = Panel()
def __getattr__(self,key):
if self.panel.__hasattr__(key)
panel_unit = self.panel.unit[key]
if '/panel/s' in panel_unit:
uc = 60*60 # unit conversion
rho = self.density
value_per_panel = getattr(self.panel,key)
return uc*rho*value_per_panel
else:
return getattr(self.panel,key)
これはすでに「プログラマティック」に見えますが、これもまたナイーブかもしれません。だから私はオプションと賛否両論は何ですか?
ありがとうございます - 私はこれらの言語エラーを修正しました。あなたはこれを初めて知っていると言えるでしょう。 – balletpiraat
Pythonへようこそ。まだ完成していないのなら、Pythonプロンプトで 'import this'を試してみてください。:-) – thebjorn
私はこの継承に関する解決法は、私が与える最初の例と似ていると思います。マッピングが外に出る。これは明示的に正しい方法です。私はまだ別の解決策に興味があります。 – balletpiraat