python - 迭代创建子类并将对象存储为类属性

标签 python class subclass

我有一个类,它执行一些复杂的计算并生成一些结果MyClass.myresults

MyClass.myresults 实际上是一个具有不同属性的类本身(例如 MyClass.myresults.mydf1MyClass.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/

相关文章:

java - 如何调用子类中重写的方法?重构的潜在候选人

python - 如何将多个图像输入 Keras 特征提取?

python - Django Rest框架测试权限

javascript - canvasJS 通过直接传递一个对象来插入新的数据点

python - 当我从应用程序中调用她时如何正确调用函数?

python - 更改类继承自的类列表

python - 根据 Python 值排列的键列表

python - rpy2 在 jupyter 实验室中将 python 对象转换为 R 对象

python - 当函数需要成为一个类时

Python::父类(super class)中的属性在继承子类中不可用