(为了更好地理解包的结构)
假设我们有一些包/模块(比如说,somemodule
),结构如下:
somemodule
-- file1.py
fo(x) # a function
-- file2.py
bar(x) # a function
-- dir1
---- file3.py
A # a class
fun(y) # some method
_bo(y) # some "hidden" method
我想要一些输出,例如:
path name type
/file1.py fo(x) function
/file2.py bar(x) function
/dir1/file3.py A class
/dir1/file3.py A.fun(y) method
/dir1/file3.py A._bo(y) method
鉴于我是 Python 新手,我不知道如何构建此类信息,并且很乐意获得帮助。
我在网上找到的最接近的是:
-
如何列出模块中的所有函数? https://stackoverflow.com/questions/139180/how-to-list-all-functions-in-a-module- 这没有足够的帮助,因为它只显示一些函数(而不是隐藏的函数),不显示类内的方法,并且不显示文件路径(即:既不目录,也不帮助,或其他一些建议的功能似乎可以胜任这项任务)。
-
如何列出目录中的所有文件? https://stackoverflow.com/questions/3207219/how-do-i-list-all-files-of-a-directory- 显示文件,但不显示模块(不是对象内的函数/类/方法)
下面是一个关于如何执行此操作的示例:
import inspect
import TestModule
def recusive_module_search(module):
members = inspect.getmembers(module)
for name, member in members:
if inspect.ismodule(member):
# Dont go too deep :)
if member is module:
recusive_module_search(member)
elif inspect.isfunction(member):
file = inspect.getfile(member)
print(file, function_signature_string(member), "function")
elif inspect.isclass(member):
file = inspect.getfile(member)
print(file, function_signature_string(member), "class")
class_members = inspect.getmembers(member)
for name, class_member in class_members:
if inspect.isfunction(class_member):
member_args = inspect.signature(class_member)
print(file, member.__name__ + "." + function_signature_string(class_member), "method")
def function_signature_string(member):
parameters = inspect.signature(member).parameters
return member.__name__ + "(" + ', '.join(str(x) for x in parameters.values()) + ")"
recusive_module_search(TestModule)
output:
C:\Users\mclea\src\PydanticMongoEngine\TestModule\functions.py Test(x: int, y: float) class
C:\Users\mclea\src\PydanticMongoEngine\TestModule\functions.py Test.__init__(self, x: int, y: float) method
C:\Users\mclea\src\PydanticMongoEngine\TestModule\functions.py Test.print_x(self) method
C:\Users\mclea\src\PydanticMongoEngine\TestModule\functions.py hi(x: int) function
C:\Users\mclea\src\PydanticMongoEngine\TestModule\SubModule\test.py test_fn(hello: str) function
根据需要继续:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)