我有一个类,它执行一些复杂的计算并生成一些结果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
非常欢迎关于不同方法的建议,我对类(class)还很陌生,我不确定这是否是一种可以接受的方法,或者我是否做了一些糟糕的事情(笨拙、内存效率低下或其他)。
最佳答案
使用这种方法有两个问题,第一个是,Result类(单独的类)仅存储类MyClass的修改值,我的意思是,它们应该是同一个类(class)。
第二个问题是内存效率,您创建同一个对象两次,用于在每次迭代时存储实际值和修改值。
建议的方法是在 python 中使用 HashMap 或字典。使用字典,您可以非常有效地存储修改后的对象的副本,并且无需创建另一个类。
class MyClass:
def __init__(self):
# some attributes ...
self.scenarios_result = {}
superObject = MyClass()
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)
superObject.scenarios_result[iter] = myclass
关于python - 迭代创建子类并将对象存储为类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62004682/