类的特殊方法"__call__"详解
1. __call__
当执行对象名+括号时, 会自动执行类中的"__call__"方法, 怎么用?
class A: def __init__(self, name): self.name = name def __call__(self, *args, **kwargs): print(123) obj = A('WangJianwei') obj() # 当执行 object() 时,会自动执行类中的"__call__"方法 # 结果: 123
实例(对象)分为可调用和不可调用, 怎么区分呢?
单纯的类, 单纯的对象
class A: def __init__(self, name): self.name = name # def __call__(self, *args, **kwargs): # print(123) obj = A('WangJianwei') # obj() print(callable(obj)) # 判断给对象是都可被执行 # 结果: False
拥有__call__方法的类
class A: def __init__(self, name): self.name = name def __call__(self, *args, **kwargs): print(123) obj = A('WangJianwei') obj() print(callable(obj)) # 判断给对象是都可被执行 # 结果: True
所以, 当一个类中有"__call__"方法是, 那么这个类产生的对象就是一个可调用对象
实例一
class Cal: def __call__(self, a, b): return a * b obj = Cal() print(obj(10,20)) #直接使用对象调用__call__, 并执行里面的代码块 # 结果:200
实例二
class A: def __call__(self, *args, **kwargs): print(args) # 结果: ('123',) class B: def __init__(self): self.obj = A() self.obj('123') objB = B()