我一直在寻找这个问题,并且还看过以前问过的问题:
how to dynamically create an instance of a class in python?
Does python have an equivalent to Java Class.forName()?
Can you use a string to instantiate a class in python?
还有更多,在其中一些,他们正在导入类或在定义中以某种方式使用类的名称。
编辑:
我需要将列表作为输入,并在列表中创建包含字符串的类作为其名称。
store_list = {'store1', 'storeabc', 'store234'}
现在我能做到,
store1 = type(store_list[0], (models.Model,), attrs)
storeabc = type(store_list[1], (models.Model,), attrs)
store234 = type(store_list[2], (models.Model), attrs)
但是我仍然必须在代码中以某种方式使用类的名称,我无法知道列表将是什么,并且我希望使用列表中的名称创建类。
答案 0 :(得分:1)
您可以将动态创建的类存储到字典中,将类名映射到类。通过这种方式,您可以在代码中使用这样的字典按名称访问您的类,例如创建实例。 例如:
store_list = {'store1', 'storeabc', 'store234'}
name2class = {}
for name in store_list:
name2class[name] = type(name, (models.Model,), attrs)
. . .
my_instance = name2class[name](...)