gpt4 book ai didi

python - 如何列出包中的所有类和方法/函数 - 具有完整的文件夹/文件路径?

转载 作者:行者123 更新时间:2023-12-05 05:37:07 33 4
gpt4 key购买 nike

(为了更好的理解包的结构)

假设我们有一些包/模块(比如,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 的新手,我不知道如何构建此类信息,很乐意寻求帮助。

我在网上找到的最接近的是:

  • How to list all functions in a module? - 这没有足够的帮助,因为它只显示一些功能(不是隐藏的),不显示类中的方法,也不显示文件路径(即:既不是目录,也不是帮助,或者其他一些建议的功能似乎可以胜任这项任务)。
  • 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)

输出:

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

根据需要继续 :)

关于python - 如何列出包中的所有类和方法/函数 - 具有完整的文件夹/文件路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73186008/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com