Python 在循环中创建类

Python 在循环中创建类,python,class,scikit-learn,Python,Class,Scikit Learn,我想定义一个类,然后创建该类的动态副本数 现在,我有这个: class xyz(object): def __init__(self): self.model_type = ensemble.RandomForestClassifier() self.model_types = {} self.model = {} for x in range(0,5): self.model_types[x] =

我想定义一个类,然后创建该类的动态副本数

现在,我有这个:

class xyz(object):

    def __init__(self):
        self.model_type = ensemble.RandomForestClassifier()
        self.model_types = {}
        self.model = {}
        for x in range(0,5):
            self.model_types[x] = self.model_type

    def fit_model():
        for x in range(0,5):
            self.model[x] = self.model_types[x].fit(data[x])

    def score_model():
        for x in range(0,5):
            self.pred[x] = self.model[x].predict(data[x])
我想适应5个不同的模型,但我认为Python 5次指向同一个类,而不是在模型字典中创建5个不同的类

这意味着,当我使用“评分模型”方法时,它只是对最后一个适合的模型进行评分,而不是对5个独特的模型进行评分


我认为我只需要使用继承来用5个不同的类填充model[]字典,但我不确定如何做到这一点。

在原始代码中,您创建了一个实例并使用了五次。相反,您只希望在将类添加到model_types数组时初始化该类,如下面的代码所示

class xyz(object):

    def __init__(self):
        self.model_type = ensemble.RandomForestClassifier
        self.model_types = {}
        self.model = {}
        for x in range(0,5):
            self.model_types[x] = self.model_type()

    def fit_model():
        for x in range(0,5):
            self.model[x] = self.model_types[x].fit(data[x])

    def score_model():
        for x in range(0,5):
            self.pred[x] = self.model[x].predict(data[x]) 

在python中,一切都是一个对象,因此您的变量也可以指向一个类,然后您的变量可以被视为一个类。

您真的是指5个不同的类,而不是5个不同的类实例吗?还有,您为什么认为继承在这里会有所帮助?继承就是如何使一个类成为另一个类的子类,例如,如果
Spam
继承自
Meat
,那么任何
Spam
对象也是
Meat
对象,并且可以在需要
Meat
对象的任何地方使用。我不知道这对你有什么好处,但如果你能解释一下你的想法,这可能会让你更清楚你到底想做什么。我不确定我需要什么,我对继承的想法只是一个猜测。也许我只是指类的实例,但我需要它们是单独的实例,这样当我运行score_model()时,它会为5个唯一的模型打分,而不是最后一个合适的模型。是的,这些是同一类的单独实例,或者更具体地说,是同一模型类型的单独模型。所以tmrlvi的答案正是你想要的。(你实际要求的也是可行的,但有点复杂…)如果我也需要提供选项,这是如何工作的?ensemble.RandomForestClassifier(max_depth=10)您可以在字典中创建选项,如
options={'max_depth':10}
,并使用
**
符号将其作为关键字参数传递,如
self.model_type(**options)
。请记住,如果需要不同的选项,则需要为每个选项创建不同的词典。有关**kwargs的更多信息: