태양 전지 패널 (시스템/컨테이너) 클러스터 시뮬레이션입니다. 이 클러스터의 속성은 요소 (패널 (하위 시스템/포함))의 속성에 클러스터 당 요소 수를 통해 거의 일대일로 연결됩니다. 예 : 클러스터의 에너지 생산은 단순히 클러스터의 패널 수와 단일 클러스터의 생산 시간입니다. 비용, 무게 등 동일합니다. 내 질문은 포함 된 클래스에 컨테이너 클래스를 연결하는 방법입니다. 하나의 예를 들어 작성합니다이 순진하게 접근 방식,컨테이너 클래스 속성을 포함 된 클래스 속성에 연결합니다.
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
파이썬에 오신 것을 환영합니다. 파이썬 프롬프트에서'import this '를 시도해보십시오. :-) – thebjorn
상속을 포함하는이 솔루션은 제가 제시 한 첫 번째 예제와 비슷할 것이라고 생각합니다 : 여러분은 (대부분) 맵핑 아웃. 그렇게하는 것이 타당한 적절한 방법입니다. 나는 대체 솔루션에 대해 아직도 궁금합니다. – balletpiraat