如何根据类名字符串实例化一个类?

-2 投票
1 回答
1087 浏览
提问于 2025-04-18 16:52

给出一些Python中的类定义,比如:

class A(object):
    def __init__(self):
        self.x = 5

class B(object):
    def __init(self):
        self.x = 42

我想根据类名的字符串来实例化其中一个类。比如说,如果 classnameA,那么我想做类似这样的事情:

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') ()

撰写回答