先看一个例子
class Test(object): def __init__(self): pass #创建实例 t = Test() t() 结果 TypeError: 'Test' object is not callable
类中没有__call__()时,t只是类的实例,不是一个可调用对象,所以会报Test不是一个可调用的对象错误
class Test(object): def __init__(self,name,age): self.name=name self.age=age def __call__(self, sex): self.sex=sex print('姓名:{},年龄:{}'.format(self.name,self.sex)) #创建实例 t = Test('jibu',30) t('男') #等价于t.__call__('男') 结果 姓名:jibu,年龄:男
加上__call__()方法会把类的实例化对象变成一个可调用的对象,所以要想把类的实例对象变成可调用对象,只需要在类中加__call__()方法即可
python的内置函数callable可以用来判断对象是否可调用
class Test(object): def __init__(self): pass def __call__(self): pass #创建实例 t = Test() t() print('类Test能否被调用:',callable(Test)) print('实例对象t能否被调用:',callable(t)) 结果 类Test能否被调用: True 实例对象t能否被调用: True
使用场景
创建类A和函数B,类A下的m函数与函数B功能类似;现在我们需要将A的对象和B函数作为参数传到函数C中去执行:
class A(): def __call__(self): print('good') a = A() def B(): print('good') def C(func): func() C(a) C(B) 结果 good good
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)