我有一个这样的名字列表:
names = ['name_1', 'name_2', ..., 'name_n']
和类的列表(类的名称),如下所示:
classes = ['class_1', 'class_2', ..., 'class_n']
我可以像这样实例化每个类:
name_1 = class_1()
如何一次实例化具有给定名称的所有类(可能使用for循环)?
答案 0 :(得分:5)
为什么要存储类的名称而不是类本身?
您可以轻松存储类而不是类名:
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
之类的东西,你可以做得更简单,但这是一个非常糟糕的习惯,会暴露一切(安全风险)。使用您自己的词典通常被认为是更合适的方式"。
答案 1 :(得分:0)
虽然不是推荐的事情,但只是为了演示目的,你去
for index in range(len(names)):
name = names[index]
klass = classes[index]
vars()[name] = vars()[klass]()