如何根据类名字符串实例化一个类?
给出一些Python中的类定义,比如:
class A(object):
def __init__(self):
self.x = 5
class B(object):
def __init(self):
self.x = 42
我想根据类名的字符串来实例化其中一个类。比如说,如果 classname
是 A
,那么我想做类似这样的事情:
myinstance = SOMETHING(classname)
这应该对应于
myinstance = A()
有没有办法做到这一点,而不使用 eval
或者映射?如果没有的话,我会这样做:
map = {'A': A, 'B': B}
myinstance = map[classname]()
1 个回答
0
考虑到Python的命名规则是基于映射的,即使你使用eval
,你也会用到某种类型的映射。
自己创建一个映射是最合适的选择,但你也可以使用globals()
,或者如果你的类存储在其他地方,可以从模块中获取映射:
import util_module
getattr(util_module, 'A') ()