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



我有这样的名称列表:

names = ['name_1', 'name_2', ..., 'name_n']

和类似类的类(类名)列表:

classes = ['class_1', 'class_2', ..., 'class_n']

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

name_1 = class_1()

如何一次将所有类实例化使用给定名称(也许用于循环)?

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

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

classes = [class1, class2]

然后使用

[cls() for cls in classes]

创建实例。

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

d = {name: cls() for name, cls in zip(names, classes)}

然后访问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)}

您可以通过使用globals或类似的方法来简单得多,但这是一个非常不好的习惯,会暴露一切(安全风险)。通常认为使用自己的词典是更"适当的方式"。

虽然不是建议的事情,但仅出于演示目的,您就可以去

for index in range(len(names)):
    name = names[index]
    klass = classes[index]
    vars()[name] = vars()[klass]()

最新更新