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显示了您当前正在做的事情。很抱歉,缺少可见性,我添加了一个示例来显示我当前正在做的事情。