对于这种可以被当做函数直接来调用的对象,我们称为可调用的对象,可调用的对象的实现就是在他们内部要实现特殊的__call__()方法。
可调用对象的意义:
可调用方法的使用场景
class A():
def go(self):
return object()
class B():
def run(self):
return object()
def func():
return object()
def main(callable):
callable()
# 我想在main中调用传入的参数,得到一个对象object
# b.run()
# a.go()
# func()
# ...
pass
main(A())
main(B())
main(func())
上面的代码可以发现当我们调用main方法的时候,还需要确定传入的对象(例如A(),B())里面的方法名是什么,这样写很不好,所以我们就可以改写成下面的代码
class A():
def __call__(self):
print("A")
class B():
def __call__(self):
print("B")
def main(callable):
callable()
# 我想在main中调用传入的参数,得到一个对象object
# b.run()
# a.go()
# func()
# ...
main(A())
main(B())
这样就不用区别到底是A类型还是B类型的对象了。