从名称和类列出了许多不同类型的我有这样的名单:如何在Python中实例
names = ['name_1', 'name_2', ..., 'name_n']
和类的列表(类名)是这样的:
classes = ['class_1', 'class_2', ..., 'class_n']
我可以实例化每个类是这样的:
name_1 = class_1()
我如何可以实例的所有类具有给定名称在上ce(也许使用for循环)?
从名称和类列出了许多不同类型的我有这样的名单:如何在Python中实例
names = ['name_1', 'name_2', ..., 'name_n']
和类的列表(类名)是这样的:
classes = ['class_1', 'class_2', ..., 'class_n']
我可以实例化每个类是这样的:
name_1 = class_1()
我如何可以实例的所有类具有给定名称在上ce(也许使用for循环)?
为什么你要存储类的名称而不是类本身?
你可以轻松存储类,而不是类名:
classes = [class1, class2]
然后用
[cls() for cls in classes]
要创建的实例。
但是动态变量名很少是个好主意,为什么不把它们存储在字典中呢?
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
或类似简单,但是这是一个非常不好的习惯,会暴露一切(安全风险)。使用自己的字典通常被认为是更“合适的方式”。
通常有更好的方法来解决这个问题是什么问题,你正在试图解决的问题。动态变量名称几乎从未是正确的解决方案。你是否有理由将类名称作为字符串,而不是实际类的列表?是否有理由需要动态创建变量名称而不是将实例存储在字典中? –
阅读您对答案的评论后,我怀疑这可能是[XY-问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你可能想问一个关于**真正问题**的新**问题,而不是关于你的**尝试**来解决它。 :) – MSeifert
我试图避免这个陷阱。我试图从一个模块立即实例化所有类。 – GGG