凡是可以把一对括号()应用到某个对象身上都可称之为可调用对象,判断对象是否为可调用对象可以用函数 callable。(我们平时自定义的函数、内置函数和类都属于可调用对象)
允许一个类的实例像函数一样被调用。这意味着你可以定义 call 为其他你想要的函数。
举例:
class Entity:
def __init__(self,x,y,size):
self.x,self.y=x,y
self.size = size
def __call__(self,x,y):
self.x,self.y=x,y
e = Entity(1,2,3)
print(callable(Entity))
print(e.x,e.y)
e(2,6)
print(e.x,e.y)
结果:
True
True
1 2
2 6
Entity是可调用对象毋庸置疑。
实例e 也是可调用对象,证明经过__call__的处理,e也可以是可调用对象。
反例:
class Entity2:
def __init__(self,x,y,size):
self.x = x
self.y = y
self.size = size
e2 = Entity2(1,2,3)
print(callable(e2))
print(e2.x)
e2(6,7,9)
print(e2.x)
结果报错:
False
1
Traceback (most recent call last):
File “G:/smtscrawl/spider/calltest.py”, line 32, in
e2(6,7,9)
TypeError: ‘Entity2’ object is not callable
首先,实例e2 不是可调用对象,强行调用则会爆出 ‘Entity2’ object 不可调用的错误