python中callable什么意思_Python中的callable是基于什么样的机制实现的

本文详细介绍了Python内置函数callable()的工作原理,通过源码分析展示了如何判断一个对象是否可调用。主要内容包括:callable()在检测类和实例时的判断依据,如类需具备__call__方法,方法需有tp_call属性。并提供了示例代码展示其用法,例如类a定义了__call__方法故为可调用,而类b没有则不可调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题,在Python中有这样的方法callable,判断一个对象是否可以调用。

callable(object)

中文说明:检查对象object是否可调用。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。

看看源码

int

PyCallable_Check(PyObject *x)

{

if (x == NULL)

return 0;

if (PyInstance_Check(x)) {

PyObject *call = PyObject_GetAttrString(x, "__call__");

if (call == NULL) {

PyErr_Clear();

return 0;

}

/* Could test recursively but don't, for fear of endless recursion if some joker sets self.__call__ = self */

Py_DECREF(call);

return 1;

}

else {

return x->ob_type->tp_call != NULL;

}

}

其中

int PyInstance_Check(PyObject *obj)

Return true if obj is an instance.

判断是否为一个对象

对于最后一个else中

ternaryfunc PyTypeObject.tp_call

An optional pointer to a function that implements calling the object. This should be NULL if the object is not callable. The signature is the same as for PyObject_Call().

This field is inherited by subtypes.

指向函数的指针,用于callable检测

所以当用callable来检测一个类是否可调用,需要这个类有__call__,如果是一个方法,检测其tp_call。

两个比较

class a:

def __call__(slef):

pass

oa = a()

oa()

callable(oa)

结果为true

class b:

def _init__(self):

pass

ob=b()

callable(ob)

结果为false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值