可调用对象


可调用对象

除了用户定义的对象,调用运算符(即())还可以应用到其他对象上。如果想判断对象能否调用,可以使用内置的callable()函数。

Python数据模型文档列出了7种可调用对象

1.用户定义的函数

  • 使用def语句或lambda表达式创建
  1. 内置函数
    • 使用C语言(CPython)实现的函数,如len或time.strftime
  2. 内置方法
    • 使用C语言实现的方法,如dict.get
  3. 方法
    • 在类的定义体中定义的函数
    • 调用类时会运行类的__new__方法创建一个实例,然后运行__init__方法,初始化实例,然后最后把实例返回给调用方。因为Python没有new运算符,所以调用类相当于调用函数。(通常,调用类会创建那个类的实例,不过覆盖__new__方法的话,也可能会出现其他行为)
  4. 类的实例
    • 如果类定义了__call__方法,那么它的实例可以作为函数调用
  5. 生成器函数
    • 使用yield关键字的函数或方法。调用生成器函数返回的是生成器对象。生成器函数在很多方面与其他可调用对象不同。生成器函数还可以作为协程

Python中有各种各样可调用类型,因此判断对象能否调用,最安全的方法是使用内置的callalbe()函数:

abs, str, 13
(, str, 13)
[callable(obj) for obj in (abs, str, 13)]
[True, True, False]