如何获取Python类的方法(含参数)并保留方法定义原顺序?
获取类方法并保留原始定义顺序的解决方案
当然可以实现!Python 3.7 及以上版本里,类的__dict__属性会严格保留成员(包括方法)的定义顺序,再配合inspect模块,就能精准提取方法参数,还能避开dir()自动排序、__code__.co_varnames包含局部变量的问题。
给你改好的代码:
import inspect def get_class_methods_with_params(PythonClass): methods = [] # 按定义顺序遍历类的成员 for name, member in PythonClass.__dict__.items(): # 只筛选方法(排除类变量、属性等) if inspect.isfunction(member) or inspect.ismethod(member): # 提取方法的参数列表 sig = inspect.signature(member) params = list(sig.parameters.keys()) methods.append((name, params)) return methods
为啥这么写?
__dict__在Python 3.7+是语言层面保证按定义顺序存储的,完全不用操心排序问题inspect.signature能准确提取方法的入参,比直接用__code__.co_varnames靠谱多了——后者会把方法内部的局部变量也混进来,根本不是纯参数列表
比如你定义个类:
class TestClass: def __init__(self, name): self.name = name def hello(self, msg): print(f"{self.name}: {msg}") def foo(self): pass
用上面的函数返回的结果就是[('__init__', ['self', 'name']), ('hello', ['self', 'msg']), ('foo', ['self'])],完全和定义顺序一致。
内容的提问来源于stack exchange,提问作者Sprinkle
相关产品推荐
相关产品推荐

