从 python 中的目录中获取所有模块名称、class 名称和方法名称
Fetching all the Module name, class name and method names from directory in python
如果目录包含多个 .py 文件
比如,a.py、b.py、c.py
我如何获取所有模块名称及其 class 名称以及最终包含在该目录
中的相应 class 的所有方法名称
过滤目录下的文件可以使用('.'指当前目录):
from os import listdir,chdir
default_path = r'c:\dev\python'
modules = [ fl for fl in listdir(default_path) if fl.endswith('.py') ]
要获取 类 和方法,我知道您可以使用检查,但如果不导入模块就无法使用它:
例如
from inspect import getmembers, isfunction, ismethod, isclass
your_module = __import__(modules[0].split('.')[0])
class_funcs = {}
funcs = [ obj for obj in getmembers(your_module) if isfunction(obj[1]) ]
classes = [ obj for obj in getmembers(your_module) if isclass(obj[1]) ]
for cls in classes:
class_funcs[cls[0]] = [ obj for obj in getmembers(cls[1]) if ismethod(obj[1]) ]
print funcs
[('function1', <function your_module.function1>),
('function2', <function your_module.function2>)]
print class_funcs
{'ClassName': [('__init__', <unbound method ClassName.__init__>),
('Method_name', <unbound method ClassName.Method_name>)]}
这将为您提供模块中的所有功能、类、类 方法。
如果您不想导入模块,我不熟悉获取方法的方法(读取文件和使用正则表达式等除外)。
如果您不想导入模块,您可以使用 AST 来检查它们。
import ast
import _ast
def inspect_module(module_path):
with open(module_path) as mf:
tree = ast.parse(mf.read())
module_classes = [_ for _ in tree.body if isinstance(_, _ast.ClassDef)]
module_classes = [(c.name, [_.name for _ in c.body if isinstance(_, _ast.FunctionDef)]) for c in module_classes]
return module_classes
它 returns 一个包含 class 名称元组和函数名称列表的列表。不幸的是,它不适用于继承的功能。
它可以很容易地扩展为您提供函数的所有参数。
如果目录包含多个 .py 文件 比如,a.py、b.py、c.py 我如何获取所有模块名称及其 class 名称以及最终包含在该目录
中的相应 class 的所有方法名称过滤目录下的文件可以使用('.'指当前目录):
from os import listdir,chdir
default_path = r'c:\dev\python'
modules = [ fl for fl in listdir(default_path) if fl.endswith('.py') ]
要获取 类 和方法,我知道您可以使用检查,但如果不导入模块就无法使用它:
例如
from inspect import getmembers, isfunction, ismethod, isclass
your_module = __import__(modules[0].split('.')[0])
class_funcs = {}
funcs = [ obj for obj in getmembers(your_module) if isfunction(obj[1]) ]
classes = [ obj for obj in getmembers(your_module) if isclass(obj[1]) ]
for cls in classes:
class_funcs[cls[0]] = [ obj for obj in getmembers(cls[1]) if ismethod(obj[1]) ]
print funcs
[('function1', <function your_module.function1>),
('function2', <function your_module.function2>)]
print class_funcs
{'ClassName': [('__init__', <unbound method ClassName.__init__>),
('Method_name', <unbound method ClassName.Method_name>)]}
这将为您提供模块中的所有功能、类、类 方法。
如果您不想导入模块,我不熟悉获取方法的方法(读取文件和使用正则表达式等除外)。
如果您不想导入模块,您可以使用 AST 来检查它们。
import ast
import _ast
def inspect_module(module_path):
with open(module_path) as mf:
tree = ast.parse(mf.read())
module_classes = [_ for _ in tree.body if isinstance(_, _ast.ClassDef)]
module_classes = [(c.name, [_.name for _ in c.body if isinstance(_, _ast.FunctionDef)]) for c in module_classes]
return module_classes
它 returns 一个包含 class 名称元组和函数名称列表的列表。不幸的是,它不适用于继承的功能。 它可以很容易地扩展为您提供函数的所有参数。