写点什么

Python:什么是 callable?

作者:一农
  • 2022 年 5 月 24 日
  • 本文字数:584 字

    阅读完需:约 2 分钟

简单来说,Python 中能被调用(called)的东西就是 callable,例如 function。使用内置的 callable 函数可以检查一个对象是不是 callable。callable 函数返回 True 说明是 callable,返回 False 说明不是 callable。


那么,Python 中到底哪些东西是 callable 呢?有下面几种情况:

  • 函数(function)

  • __call__ 方法的类的实例(instance)

  • 类的方法(method)


下面的代码实例展示了这几种情况:

# 函数是callabledef f():    return 5

print(callable(f)) # True
f1 = fprint(callable(f1)) # True
# 数字不是callablenum = 5print(callable(num)) # False

# 类是callable,如果类中有方法__call__,类的实例也是callableclass A: def __call__(self): print('This is A')

# This proves that class is callablea = A()print(callable(a)) # Truea()

# 如果类中没有方法__call__,类的实例不是callableclass B: def __init__(self): print("This is B")

b = B()

b() # TypeError: 'B' object is not callable

# 类的方法是callableclass C: def m1(self): print('This is m1')

print(callable(C.m1)) # TrueC().m1()
复制代码


最后,还有一种是 callable 的情况,如果对象里有非空的 tp_call 成员(c 语言结构体),这涉及到和 C 语言的互操作,这里不再展开,如果感兴趣可以参考https://docs.python.org/3/c-api/call.html

发布于: 刚刚阅读数: 5
用户头像

一农

关注

各位网友好,我是一农 2018.11.08 加入

半农+半农=1农

评论

发布
暂无评论
Python:什么是callable?_Python_一农_InfoQ写作社区