按名称获取对象

时间:2014-02-06 15:53:15

标签: python class

是否可以通过提供名称来创建类的实例,例如:

instance = "TestXYZ"()

假设TestXYZ由导入上述代码的类导入,TestXYZ定义为:

class TestXYZ(object):
   ...

3 个答案:

答案 0 :(得分:1)

是的,有可能。机制取决于您如何导入类:

>>> globals()["TestXYZ"]()
<__main__.TestXYZ object at 0x10f491090>

>>> getattr(sys.modules["test_module"], "TestXYZ")()
<test_module.TestXYZ object at 0x10cf22090>

答案 1 :(得分:1)

您可以使用以下命令从当前命名空间获取对象的引用:

klass = globals()['TestXYZ']

然后你可以创建一个类的实例:

instance = klass()

答案 2 :(得分:1)

我不确定你为什么要这样做,但不是使用globals()我建议你在这里创建一个字典:

class Foo:
   pass

d = {'Foo':Foo}
ins = d['Foo']()

或者将课程移至其他模块:

import some_module                
ins = getattr(some_module, 'Foo')()