详解Python的__call__()方法

Python中那些能够在后面加()来调用执行的对象,被称为可调用对象。可调用对象包括自定义函数、Python内置函数、实例对象和实例方法等。

call()方法是Python中一个很特殊的方法。凡是可调用对象,都可以通过调用__call__()方法来调用该对象。如果类中定义了__call__()方法,那么该类的实例对象也将成为可调用对象。该对象被调用时,将执行__call__()方法中的代码。

下面我们分别对这几种可调用对象执行__call__()方法。

自定义函数

对于自定义函数的调用,通常情况下是在函数名后加()来调用。但同样也可以用__call__()方法来调用。

def test():
    print("Function test() is called")

print("Function test() is callable: %s" % callable(test))
test()
test.__call__()

输出结果:

Function test() is callable: True
Function test() is called
Function test() is called

内置函数

内置函数同样也可以用__call__()方法来调用。

print("Build-in function int() is callable: %s" % callable(int))
print(int(3))
print(int.__call__(3))

输出结果:

Build-in function int() is callable: True
3
3

类的实例对象

如果一个类中没有定义__call__()方法,那么这个类的实例对象是不可以被调用的。

class Person(object):
    pass

c = Person()
print("Object c is callable: %s" % callable(c))

输出结果:

Object c is callable: False

但如果类中定义了__call__()方法,那么这个类的实例对象是可以被调用的。调用该实例对象就是执行__call__()方法中的代码。

class Person(object):

    def __call__(self):
        print("Method __call__() is called")

d = Person()
print("Object d is callable: %s" % callable(d))
d()

输出结果:

Object d is callable: True
Method __call__() is called

参考

Python call()方法(详解版)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐