列出函数/方法的参数并跳过python3中的“self”

2024-09-28 22:18:55 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下代码:

args, varargs, varkw, defaults = inspect.getargspec(method)
if inspect.ismethod(method):
    args = args[1:]    # Skip 'self'

当在Python2上运行此程序并添加带有self的内容时,self将被跳过(如注释中所述)。但是在python3上,我在使用Class.method(即不是instance.method)上的代码时遇到了麻烦。这个问题与Detecting bound method in classes (not instances) in Python 3相似,但没有一个答案有效。使用inspect.isroutine()或{}会破坏非方法(非self)的代码。使用hasattr(method, '__self__')Class.method无效。在

我为此编写了一个小测试脚本:

^{pr2}$

这段代码同时适用于python2和python3。然而,args_without_self(Class.method)在python3中也有self(我希望避免这种情况,但不要破坏其他的)。所有签名都应打印['a', 'b', 'c']。在


Tags: 代码inselfifargsmethodpython3class
1条回答
网友
1楼 · 发布于 2024-09-28 22:18:55

在Python3上,不能检测类上的方法,因为它们是从不绑定的。它们是正则函数。在

您最多可以查看它们的qualified name猜测是否可能是方法,然后查看第一个参数是否命名为self。换句话说,启发式和猜测:

if inspect.isfunction(method) and `.` in method.__qualname__ and args[0] == 'self':
    args = args[1:]    # Skip 'self'

相关问题 更多 >