怎么判断一个函数是对象的方法?

怎么判断一个函数是对象的方法?

>>> f = open("test.ss", "r")

>>> type(f.read)

<class 'builtin_function_or_method'>

type函数能得到某个变量的类型,怎么确定一个变量是某个对象的方法呢?注意,是确定是对象的方法而不是全局函数,这是有区别的!

我写出了如下程序片段,但是结果都不对。

import types

if type(x) == types.BuiltinFunctionType or type(x) == types.BuiltinMethodType :

正确的写法是什么?


回答:

对于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.BuiltinMethodTypetypes.BuiltinFunctionType 是一样的。

types.BuiltinMethodType is types.BuiltinFunctionType  # True


回答:

class A:

def f(self, n):

return n

a = A()

ff = a.f

print(hasattr(a, ff.__name__))


回答:

可以判断函数方法名称是否在dir(class) 中

以上是 怎么判断一个函数是对象的方法? 的全部内容, 来源链接: utcz.com/a/160449.html

回到顶部