无法将类定义转换为函数

时间:2018-05-06 12:54:39

标签: python factory

我希望在一个中心包中有一个函数,它可以根据类的字符串名称创建一个对象。

我想要这样的事情:

 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()并让它访问主模块的命名空间,但这似乎不起作用。我错过了一些如何创建这个集中式工厂的方法吗?

1 个答案:

答案 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>