Python 如何顺序和有条件地链接不同类的实例化
基本上,我有一个包含相同输入参数的类的列表(要么Python 如何顺序和有条件地链接不同类的实例化,python,Python,基本上,我有一个包含相同输入参数的类的列表(要么ClassX(a,**kwargs)要么ClassX(**kwargs)或者ClassX(b,**kwargs)。我想创建一个实例化类的列表。现在我按顺序完成每个类的创建 有没有一种方法可以有效地使用列表理解来使其更清晰?例如,除了**kwargs,还可以创建一个类对象列表,并注释那些需要形式参数(a和b)的对象,例如,循环: [ClassA:(无,无),ClassB:(fnA,无),ClassC:(无,fnB)]实现以下功能的创建: listOf
ClassX(a,**kwargs)
要么ClassX(**kwargs)
或者ClassX(b,**kwargs)
。我想创建一个实例化类的列表。现在我按顺序完成每个类的创建
有没有一种方法可以有效地使用列表理解来使其更清晰?例如,除了**kwargs
,还可以创建一个类对象列表,并注释那些需要形式参数(a
和b
)的对象,例如,循环:
[ClassA:(无,无),ClassB:(fnA,无),ClassC:(无,fnB)]
实现以下功能的创建:
listOfClasses.append(ClassA(**kwargs))
listOfClasses.append(ClassB(**kwargs,a=fnA))
listOfClasses.append(ClassC(**kwargs,b=fnB))
我问这个问题的原因是因为在我的例子中,有20-30个不同的类需要创建并按顺序附加到列表中
为了更好地说明,我现在使用的确切代码如下:
def method(self, **kwargs):
chain = []
chain.append(ClassA(**kwargs))
chain.append(ClassB(**kwargs))
chain.append(ClassC(a=static_method_x, **kwargs))
chain.append(ClassD(b=static_method_y, **kwargs))
chain.append(ClassE(**kwargs))
chain.append(ClassF(a=static_method_z, **kwargs))
...
因此,每个实例化都遵循三种类型中的一种,但是
**kwargs
始终是相同的。a
或b
的值,当它们是需要它们的类时,它们是不同的,并且对应于我的类中的其他静态方法。我想知道是否有一种方法可以通过使用pre已定义的顺序类和各自参数的列表。如果创建一个列表元组,每个元组包含要实例化的类和额外参数,则可以使用列表理解来实例化每个元组,并合并kwargs
和额外的参数
def method(self, **kwargs):
to_instantiate = [
# (Class, extra_args)
(ClassA, {}),
(ClassB, {}),
(ClassC, {'a': static_method_x})
(ClassD, {'b': static_method_y})
(ClassE, {})
(ClassF, {'a': static_method_z})
]
chain = [C(**{**kwargs, **extra_args}) for C, extra_args in to_instantiate]
**{**kwargs,**extra_args}
part意味着用kwargs
和extra_args
中的所有条目创建一个新的字典,然后将其分解为参数,就像您以前使用**kwargs
所做的那样。请注意,此语法是在python 3.5中引入的。如果您想更好地理解它,还想为较旧的python版本提供解决方案。
老实说,虽然我认为这段代码比你现在的代码更难看,更难理解。你写的代码可能有点冗长,但我认为它更容易阅读。请写一些你正在做的代码。有趣的概念,但你的问题有点太抽象了。这将有助于我们理解你想做什么,如果你做了a显示了您当前正在做的事情。很抱歉,缺少可见性,我添加了一个示例来显示我当前正在做的事情。