Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于从(类、参数、kwargs)元组列表实例化的模式_Python_Design Patterns - Fatal编程技术网

Python 用于从(类、参数、kwargs)元组列表实例化的模式

Python 用于从(类、参数、kwargs)元组列表实例化的模式,python,design-patterns,Python,Design Patterns,我有一组(可能相当复杂)Python类,它们执行特定的数据转换,例如主成分分析(PCA)。让我们将这些块称为块组织在管道中,管道可以具有任何块序列。几个管道以我们称之为模型的方式组织起来 我使用与数千个数据集并行的块管道应用这些模型。因此,我有数千个模型(以及管道和块)的实例化,因为每个数据集都有自己的关联参数存储在块中(例如,PCA的主要组件) 现在,由于我想要一组预定义的块管道,我在我的pipelines.py中定义了一些模块属性: PIPELINE_A = [(Block1, args_b

我有一组(可能相当复杂)Python类,它们执行特定的数据转换,例如主成分分析(PCA)。让我们将这些块称为组织在管道中,管道可以具有任何块序列。几个管道以我们称之为模型的方式组织起来

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

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

PIPELINE_A = [(Block1, args_block1, kwargs_block1),
              (Block2, args_block2, kwargs_block2),
              ...
              (BlockN, args_blockN, kwargs_blockN)]
MODEL_1 = {'in': (PIPELINE_A, args_pl_A, kwargs_pl_A),
           ...
           'out': (PIPELINE_B, args_pl_B, kwargs_pl_B)}
my
models.py中的模型也是如此:

PIPELINE_A = [(Block1, args_block1, kwargs_block1),
              (Block2, args_block2, kwargs_block2),
              ...
              (BlockN, args_blockN, kwargs_blockN)]
MODEL_1 = {'in': (PIPELINE_A, args_pl_A, kwargs_pl_A),
           ...
           'out': (PIPELINE_B, args_pl_B, kwargs_pl_B)}
这些可以看作是管道/模型配置,我可以从中实例化管道和模型对象。我还没有在模块中实例化它们,因为它们对于所有数据集都应该是不同的

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

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

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

将creator lambda存储在您的
model\u 1
中如何?它看起来是这样的:
model\u 1={'in':lambda:pipeline\a(arg1,arg2,kw1=kwarg1,kw2=kwarg2),“out”:lambda:PIPELINE_B(arg3,arg4,kw3=kwarg3,kw4=kwarg4)}
。通过这种方式,您可以使用正常的调用语法,并使用STIL延迟创建,直到需要构造实例为止。(然后按照以下方式完成创建:
实例=模型1['in']()
)@阿尔夫:谢谢,这是我正在寻找的创造性技巧的一个很好的例子。但是你可以不使用lambdas,只为这个任务编写函数:
def create_-in():return PIPELINE_a(arg1,arg2,kw1=kwarg1,kw2=kwarg2)
然后在字典中使用它:
MODEL_-1={'in':create_-in,}
。如果需要引用局部变量,您可以使用局部函数进行此操作(在这种情况下,请确保传递它们)。给出会说话的名称通常可以清除代码的意图。将creator lambda存储在
MODEL_1
中如何?它将如下所示:
MODEL_1={'in':lambda:PIPELINE_A(arg1,arg2,kw1=kwarg1,kw2=kwarg2),“out”:lambda:PIPELINE_B(arg3,arg4,kw3=kwarg3,kw4=kwarg4)}
。通过这种方式,您可以使用正常的调用语法,并使用STIL延迟创建,直到需要构造实例为止。(然后按照以下方式完成创建:
实例=模型1['in']()
)@阿尔夫:谢谢,这是我正在寻找的创造性技巧的一个很好的例子。但是你可以不使用lambdas,只为这个任务编写函数:
def create_-in():return PIPELINE_a(arg1,arg2,kw1=kwarg1,kw2=kwarg2)
然后在字典中使用它:
MODEL_-1={'in':create_-in,}
。如果需要引用局部变量,您可以使用局部函数进行此操作(在这种情况下,请确保传递它们)。给出会说话的名称通常可以清除代码的意图。将creator lambda存储在
MODEL_1
中如何?它将如下所示:
MODEL_1={'in':lambda:PIPELINE_A(arg1,arg2,kw1=kwarg1,kw2=kwarg2),“out”:lambda:PIPELINE_B(arg3,arg4,kw3=kwarg3,kw4=kwarg4)}
。通过这种方式,您可以使用正常的调用语法,并使用STIL延迟创建,直到需要构造实例为止。(然后按照以下方式完成创建:
实例=模型1['in']()
)@阿尔夫:谢谢,这是我正在寻找的创造性技巧的一个很好的例子。但是你可以不使用lambdas,只为这个任务编写函数:
def create_-in():return PIPELINE_a(arg1,arg2,kw1=kwarg1,kw2=kwarg2)
然后在字典中使用它:
MODEL_-1={'in':create_-in,}
。如果需要引用局部变量,则可以使用局部函数(在这种情况下,请确保传递它们)。给出会说话的名称通常可以清除代码的意图。