Python 动态类名

11 投票
8 回答
24424 浏览
提问于 2025-04-16 08:55

我想根据一个字符串的值来创建一个类的实例,但遇到了问题。下面的 parser 对象是一个 dict(字典),在这个例子中,我们假设有一个叫 foo 的类,而 parser['name'] 的值是 'foo':

obj = parser['name']()

这样做会失败,报错信息是 TypeError: 'str' object is not callable。但是,如果我这样做:

class foo:
    def __init__(self():
        print 'Hello'

如果我直接写 obj = foo(),那就没问题,可以成功创建出正确的对象。而用 obj = type(parser['name'])() 也不行。

那该怎么解决呢? 更新:我其实不想用映射系统:这些类的名字是定义在 INI 文件里的,所以它们会是字符串形式的。

8 个回答

7

不要使用字符串:

parser = {}

class foo:
    pass


parser['foo'] = foo

obj = parser['foo']()
15

正如在这里回答的那样:
Python 动态类名

如果你知道这些类是在哪个模块里定义的,其实有更简单的方法可以做到这一点,比如:

getattr(my_module, my_class_name)()
16
classmap = {
  'foo': foo
}

obj = classmap[parser['name']]()

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答