任何类,只须要定义一个__call__()方法,就可直接对实例进行调用
对实例进行直接调用就比如对一个函数进行调用同样函数
__call__()还可定义参数,因此调用彻底能够把对象当作函数,把函数当作对象,由于这二者之间原本就没啥根本的区别
若是把对象当作函数,那么函数自己其实也能够在运行期动态建立出来,由于类的实例都是运行期建立出来的,所以也就模糊了对象和函数的界限
判断变量是对象仍是函数
更多的时候,需判断对象是否能被调用,若是对象能被调用,则该对象就是一个Callable对象
好比函数和上面定义的带有__call__()的类实例,它们就是就是能被调用的,它们都是一个Callable对象
spa
class Student(object): def __init__(self, name): self.name = name def __call__(self): print('My name is %s.' % self.name) s = Student('Michael') s() #输出:My name is Michael. #经过callable()函数,能够判断一个对象是不是"可调用"对象 callable(Student()) #True callable(max) #True callable([1, 2, 3]) #False callable(None) #False callable('str') #False