如果在类中实现了 __call__ 方法,那么实例对象也将成为一个可调用对象
class Entity1: def __init__(self, size, x, y): self.x, self.y = x, y self.size = size def __call__(self, x, y): self.x, self.y = x, y e = Entity1(1, 2, 3) #实例 print(e.x,e.y) e(4, 5) #实例对象可调用 print(e.x,e.y) class Entity2: def __init__(self, *args,**kwargs): print(args,kwargs) def __call__(self, *args,**kwargs): print(args,kwargs) e = Entity2(1, 2, 3,a=1,b=2) e(4, 5,c=3)
#类可以记录数据(属性),利用这种特性可以实现基于类的装饰器 class Counter: def __init__(self, func): self.count = 0 self.func = func def __call__(self, *args, **kwargs): self.count += 1 return self.func(*args, **kwargs) @Counter def fuc(): pass [fuc() for i in range(10)] print(fuc.count)
原文:https://www.cnblogs.com/shuzf/p/13353681.html