假设我有以下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
我的问题是
在上面标记为"# how"
的代码中,自我的正确表达式是什么?应该是"sub_sub_funcX"
吗?
导入顶层模块function_group
时,如何获取所有这些[函数]的完整列表?我的意思是,每个子功能模块都可以在导入时向某些功能列表报告吗?
有没有一种方法可以轻松扩展模块而无需在__init__
中添加内务管理代码,只需轻松删除即可轻松删除?例如,我稍后会更改结构:
\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
答案 0 :(得分:1)
1:你需要
import inspect
import sys
inspect.getmembers(sys.modules[__name__], inspect.isfunction)
2:我能想到的最好的答案是导入子模块,并在顶层检查它们。
您能告诉我们您正在尝试使用这些功能吗?我感觉有比这个内省更好的方式。