我目前有这样的包结构:
common/
a.py
b.py
c.py
__init__.py
.svn
util/
util.py
__init__.py
我想在util.py中编写一个函数来检索a.py,b.py,c.py中的所有函数
from os import listdir
files = listdir(directory_to_common)
for f in files:
if '.py' in f and '__' not in f:
module_name = f.split(.)[0]
module = __import__(module_name)
我可以成功导入模块。
比我用过
inspect.getmembers(module)
但它返回了许多不需要的信息。 从这里,我如何检索a.py,b.py,c.py中的函数?
#a.py, b.py, c.py has similar structure as follows:
class A:
def __init__(self):
.....
def method1_in_a(self):
.....
def method2_in_a(self):
.....
答案 0 :(得分:1)
要仅返回所需信息,请使用可选参数predicate
。查找模块中所有类以及类中所有函数的示例:
classes = inspect.getmembers(module, predicate=inspect.isclass)
for cls_name, cls in classes:
functions = inspect.getmembers(cls, predicate=inspect.isfunction)
for fn_name, fn in functions:
print(cls_name, fn_name)
有关所有可用谓词的列表,请参阅inspect module docs(所有名为inspect.isXYZ
的函数都是谓词)。
答案 1 :(得分:0)
你可以试试这个:
import inspect
from os import listdir
files = listdir(directory_to_common)
functions = [inspect.getmembers(__import__("{}.{}".format(directory_to_common, i[:-3])), inspect.isfunction) for i in files if i.endswith('.py') and not i.startswith('__')]