对于Python代码定义的类和函数,可以通过types.MethodType和types.FunctionType判断。而且只能分辨出对象实例的绑定方法。
import types
# function
isinstance(A.f, types.FunctionType) # True
# method
isinstance(A().f, types.MethodType) # True
但是对builtin
类型的对象不能判断是方法还是函数。
这里说的builtin
是指用C/C++编写的二进制模块,对于二进制模块提供的函数来说没有方法和函数的区别。这个是 Python C-API 决定的。
在标准库里提供的 types.BuiltinMethodType
和 types.BuiltinFunctionType
是一样的。
types.BuiltinMethodType is types.BuiltinFunctionType # True
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…