Dim*_*ims 3 python reflection python-3.x
假设我有myfile.py一些类A,B并在CINSIDE中定义了它。现在,我想用str中的名称实例化class。我不知道要传递给getattr它什么。像这样的所有示例都假定类在其他模块中:
module = __import__(module_name)
class_ = getattr(module, class_name)
instance = class_()
Run Code Online (Sandbox Code Playgroud)
但是我没有module_name。
如果您使用的是同一模块,则可以调用globals(),只需将类名用作返回的字典上的键即可:
例如 mymodule.py
class A: ...
class B: ...
class C: ...
def factory(classname):
cls = globals()[classname]
return cls()
Run Code Online (Sandbox Code Playgroud)
否则,您可以简单地将模块本身导入函数中,并使用getattr(这样做的好处是您可以将该工厂函数重构为任何其他模块而无需更改):
def factory(classname):
from myproject import mymodule
cls = getattr(mymodule, classname)
return cls()
Run Code Online (Sandbox Code Playgroud)