用于从(类,args,kwargs)元组列表中实例化的模式

时间:2015-06-12 00:15:52

标签: python design-patterns

我有一组(可能非常复杂的)Python类,它们执行某些数据转换,例如:主成分分析(PCA)。我们称之为管道中进行组织,可以包含任何块序列。我们称之为模型

组织了几个管道

我将这些带有管道的模型与数千个数据集并行应用。因此,我有数以千计的模型实例(以及流水线和块),因为每个数据集都有自己的相关参数,这些参数存储在块中(例如,PCA的主要组件)。

现在,由于我想拥有一组预定义的块管道,我在pipelines.py中将一些定义为模块属性:

PIPELINE_A = [(Block1, args_block1, kwargs_block1),
              (Block2, args_block2, kwargs_block2),
              ...
              (BlockN, args_blockN, kwargs_blockN)]

models.py中的模型也是如此:

MODEL_1 = {'in': (PIPELINE_A, args_pl_A, kwargs_pl_A),
           ...
           'out': (PIPELINE_B, args_pl_B, kwargs_pl_B)}

这些可以被认为是管道/模型配置,我可以从中实例化管道和模型对象。我还没有在模块中实例化它们,因为它们对于所有数据集应该是不同的。

因为我总是需要一个类名,参数和关键字参数,所以我必须将它们全部存储在一个元组中,直到我需要它们来实例化对象(例如[cl(*ar, **kw) for cl, ar, kw in MODEL_1)。这很难看,我怀疑有更好的方法。

我想知道是否有人可以为这种情况推荐一种设计模式或技巧。

P.S。 我意识到我可以在我的模块中实例化一个原型管道/模型,然后从中复制。然而,块可能变得非常复杂,我想知道Python是否能够很好地处理深度复制。

0 个答案:

没有答案