복잡한 계산을 수행하고 결과를 생성하는 클래스가 있습니다 MyClass.myresults
.
MyClass.myresults
예를 들어, 서로 다른 특성 (와 클래스 자체는 사실이다 MyClass.myresults.mydf1
, MyClass.myresults.mydf2
.
이제 MyClass
시나리오 목록에 따라 반복적 으로 실행해야합니다 ( scenarios=[1,2,[2,4], 5]
.
이것은 간단한 루프로 발생합니다.
for iter in scenarios:
iter = [iter] if isinstance(iter, int) else iter
myclass = MyClass() #Initialize MyClass
myclass.DoStuff(someInput) #Do stuff and get results
results.StoreScenario(myclass.myresults, iter)
그리고 각 반복 저장소의 끝에서 MyClass.myresults
.
Results
각 반복에서 하위 클래스를 만들고 그 scenario_1, scenario_2, scenario_2_4
안에 저장 하는 별도의 클래스 ( ) 를 만들고 싶습니다 MyClass.myresults
.
class Results:
# no initialization, is an empty container to which I would like to add attributes iteratively
class StoreScenario:
def __init__(self, myresults, iter):
self.'scenario_'.join(str(iter)) = myresults #just a guess, I am assuming this is wrong
다른 접근 방식에 대한 제안은 환영받을 것 이상입니다. 저는 수업에 익숙하지 않으며 이것이 허용 가능한 접근 방식인지 또는 내가 끔찍한 일을하고 있는지 (투박하거나 메모리 비효율적이거나 기타) 확실하지 않습니다.
그래서 setattr 을 사용하여 해결했습니다 .
class Results:
def __init__(self):
self.scenario_results= type('ScenarioResults', (), {}) # create an empty object
def store_scenario(self, data, scenarios):
scenario_key = 'scenario_' + '_'.join(str(x) for x in scenarios)
setattr(self.simulation_results, scenario_key,
subclass_store_scenario(data))
class subclass_store_scenario:
def __init__(self, data):
self.some_stuff = data.result1.__dict__
self.other_stuff = data.result2.__dict__
이를 통해 다음과 같은 것을 호출 할 수 있습니다.
results.scenario_results.scenario_1.some_stuff.something
results.scenario_results.scenario_1.some_stuff.something_else
다른 측정 값, 요약 또는 시나리오 별을 계산해야하므로 다음을 사용하여 반복적으로 할당 할 수 있습니다 setattr
.
def construct_measures(self, some_data, configuration):
for scenario in self.scenario_results:
#scenario is a reference to the self.scenario_results class.
#we can simply add attributes to it
setattr(scenario , 'some_measure',
self.computeSomething(
some_data.input1, some_data.input2))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다