详解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