如何在Python中从名称和类列表中实例化许多不同的类

GGG*_*GGG 2 python class instantiation python-3.x

我有一个这样的名字列表:

names = ['name_1', 'name_2', ..., 'name_n']
Run Code Online (Sandbox Code Playgroud)

以及类的列表(类的名称),如下所示:

classes = ['class_1', 'class_2', ..., 'class_n']
Run Code Online (Sandbox Code Playgroud)

我可以像这样实例化每个类:

name_1 = class_1()
Run Code Online (Sandbox Code Playgroud)

如何一次实例化具有给定名称的所有类(可能使用for循环)?

MSe*_*ert 5

为什么要存储类的名称而不是类本身?

您可以轻松地存储类而不是类名:

classes = [class1, class2]
Run Code Online (Sandbox Code Playgroud)

然后使用

[cls() for cls in classes]
Run Code Online (Sandbox Code Playgroud)

创建实例.

但是,动态变量名称很少是个好主意,为什么不将它们存储在dict中呢?

d = {name: cls() for name, cls in zip(names, classes)}
Run Code Online (Sandbox Code Playgroud)

然后访问d['name_1']获取实例'name_1'.

如果您无法解决类名列表问题,也可以使用字典解决方案.您只需创建一个字典,将名称映射到实际的类:

name_to_class = {'class_1': class_1, 'class_2': class_2, ...}

d = {name: name_to_class[cls]() for name, cls in zip(names, classes)}
Run Code Online (Sandbox Code Playgroud)

你可以通过使用globals或类似的方式更简单地做到这一点,但这是一个非常糟糕的习惯并且会暴露一切(安全风险).使用自己的词典通常被认为是更"合适的方式".