关于反射:获取python包的所有功能

Getting all functions of python package

我有一个多模块python包,它有一个类为MyClass的文件,很少有具有函数的文件(一个文件可以包含多个函数)。

我试图获取这个包中的所有函数。

首先,使用以下方法:

1
2
3
modules = []
for importer, module, ispkg in pkgutil.iter_modules(package.__path__):
    modules.extend(module)

但我只有模块名,没有模块对象。

当我试图使用inspect.getmembers(module, inspect.isfunction)获取这些模块的函数时,我当然得到了一个空的集合。

那么,如何从包中获取所有模块对象以进一步获取函数呢?

是否存在从多文件包获取所有函数的更简单方法?

另外,我需要的正是function对象,而不仅仅是它们的名字。

编辑。

  • dir(package)只提供了内置变量:

    ['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']

  • inspect.getmembers(package, inspect.infunction)给出一个空的列出每个module的相同代码,如上所述。

  • dir(module)给了我所有可用于str对象(因为,iter_modules()只给出了模块)。

  • AST…你确定没有更简单的解决方案吗?


  • 试试这个:

    1
    2
    for importer, module, ispkg in pkgutil.iter_modules(package.__path__):
       print dir(__import__(module))