我希望在一个中心包中有一个函数,它可以根据类的字符串名称创建一个对象。
我想要这样的事情:
import utils
class my_class: ...
obj = utils.make_class('my_class')
然后utils看起来像这样:
def make_class(class_name):
cls = globals()[class_name]
return cls()
但是,当然这不起作用,因为my_class是在我的主模块中定义的,我试图在utils global()
中找到它
我希望有一种方法可以导入make_class()
并让它访问主模块的命名空间,但这似乎不起作用。我错过了一些如何创建这个集中式工厂的方法吗?
答案 0 :(得分:0)
您可以将引用传递到导入的callables,例如
pass_global.py:
import pass_global_utils as utils
class A:
pass
obj = utils.make_obj_from_class('A', globals())
print(obj)
pass_global_utils.py
:
def make_obj_from_class(class_, globals_):
# print(class_)
# print(globals_)
return globals_[class_]()
输出
<__main__.A object at 0x7fbeba50e278>