考虑以下代码:
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()
或{hasattr(method, '__self__')
对Class.method
无效。在
我为此编写了一个小测试脚本:
^{pr2}$这段代码同时适用于python2和python3。然而,args_without_self(Class.method)
在python3中也有self(我希望避免这种情况,但不要破坏其他的)。所有签名都应打印['a', 'b', 'c']
。在
在Python3上,不能检测类上的方法,因为它们是从不绑定的。它们是正则函数。在
您最多可以查看它们的qualified name和猜测是否可能是方法,然后查看第一个参数是否命名为
self
。换句话说,启发式和猜测:相关问题 更多 >
编程相关推荐