通过名称动态导入类以实现静态访问

0 投票
1 回答
1295 浏览
提问于 2025-04-15 17:14

我正在动态生成类名,然后想通过这个名字来导入类,以便访问一个静态方法。

这是我想在 "the_module.py" 中导入的类:

class ToImport(object):

    @classmethod
    def initialize(cls, parameter):
        print parameter

根据一篇博客文章,这是我目前的进展:

theModule = __import__("the_module")
toImport = getattr(theModule, "ToImport")
toImport.initialize("parameter")

但是博客中的例子似乎不完整,因为它给了我一个模块对象,却没有我想要的类 ToImport。查看 __import__()文档,我发现这个函数还有更多可选的属性。我成功地使用了

theModule = __import__("the_module", globals(), locals(), ["ToImport"])

为什么我必须提供 fromlist 属性?难道我不能导入所有模块的属性吗?

1 个回答

2

我做的和你一模一样,成功获取了那个类。

In [1]: theModule = __import__("the_module")

In [2]: toImport = getattr(theModule, "ToImport")

In [3]: toImport.initialize("parameter")
parameter

我用的是Python 2.6.4。你能再详细解释一下,具体是哪里不管用吗?

撰写回答