在python中导入时自动收集sub_modules中的信息?

时间:2010-11-01 06:49:03

标签: python python-module

假设我有以下python文件结构:

\function_group
     |-__init__.py
     |-sub_function1
     |----|__init__.py
     |----|sub_sub_func1.py
     |----|sub_sub_func2.py
     |----|sub_sub_func3.py 
     |-sub_function2
     |----|__init__.py
     |----|sub_sub_func1.py
     |----|sub_sub_func2.py
     |----|sub_sub_func3.py 

在每个sub_sub_funcX.py中,列表函数将收集sub_sub_funcX.py本身的所有函数名称,

# sub_sub_funcX.py  
# and each sub_sub_funcX.py file has similiar code

import inspect 
functions = inspect.getmembers(self?, inspect.isfunction)   # how to write the "self" here

def bar(x, y):
    return x * y

def bar1(x, y):
    return x + y

我的问题是

  1. 在上面标记为"# how"的代码中,自我的正确表达式是什么?应该是"sub_sub_funcX"吗?

  2. 导入顶层模块function_group时,如何获取所有这些[函数]的完整列表?我的意思是,每个子功能模块都可以在导入时向某些功能列表报告吗?

  3. 有没有一种方法可以轻松扩展模块而无需在__init__中添加内务管理代码,只需轻松删除即可轻松删除?例如,我稍后会更改结构:

  4. \function_group
         |-__init__.py
         |-sub_function1
         |----|__init__.py
         |----|sub_sub_func1.py
         |----|sub_sub_func2.py
         |----|sub_sub_func3.py 
         |-sub_function2
         |----|__init__.py
         |----|sub_sub_func1.py
         |----|sub_sub_func2.py
         |----|sub_sub_func3.py 
         |----|sub_sub_func4.py            # new added
         |-sub_function3                   # new added    
         |----|__init__.py                 # new added
         |----|sub_sub_func1.py            # new added
    
         |----|sub_sub_sub_function_31     # new sub added    
         |--------|__init__.py             # new added
         |--------|sub_sub_sub_sub_func1.py# new added
    

1 个答案:

答案 0 :(得分:1)

1:你需要

import inspect
import sys
inspect.getmembers(sys.modules[__name__], inspect.isfunction)

2:我能想到的最好的答案是导入子模块,并在顶层检查它们。

  1. 不,有责任在顶级软件包(导入的软件包)上执行它需要做的事情。除非将它们导入顶层软件包,否则您无法导入顶层软件包并期望子软件包执行它们的操作。由于您不想修改顶级 init .py,因此不会发生这种情况。
  2. 您能告诉我们您正在尝试使用这些功能吗?我感觉比这个内省更好的方式。