如何通过CURRENT文件中的字符串名称在Python中实例化类?

时间:2018-07-02 19:04:00

标签: python python-3.x reflection

假设我有myfile.py,其中定义了一些类ABC。现在,我想用str中的名称实例化class。我不知道要为此传递给getattr的内容。所有examples like this都假定类在其他模块中:

module = __import__(module_name)
class_ = getattr(module, class_name)
instance = class_()

但是我没有module_name

1 个答案:

答案 0 :(得分:4)

如果您在相同的模块上对其进行了定义,则可以调用globals(),只需将类名用作返回字典的键即可。

例如mymodule.py

class A: ...
class B: ...
class C: ...

def factory(classname):
    cls = globals()[classname]
    return cls()

否则,您可以简单地将模块本身导入函数中,并使用getattr(这样做的好处是您可以将该工厂函数重构为任何其他模块而无需更改):

def factory(classname):
     from myproject import mymodule
     cls = getattr(mymodule, classname)
     return cls()