Python中万物皆对象,对象分为可调用和不可调用,可调用就是一个对象名称后面可以跟()
,如之前所说装饰器语法糖必须是一个可调用的对象。
1 类对象可以不可以调用
Python给类提供了名为call的特别方法,该方法允许创建可调用的对象。默认情况下,call方法是没有实现的,这意味着大多数情况下实例是不可调用的。
示例:
class Foo:
pass
print(callable(Foo))
print(callable(Foo()))
结果:
True
False
也就是说,Python中类对象是可调用,类实例是不可调用的。
call 方法让类实例可调用
__call__
是Python中的一个魔术方法,帮助实现一些特殊功能。
示例:
class Foo:
def __call__(self):
print('hello call')
print(callable(Foo))
print(callable(Foo()))
# Foo()(),分成Foo()创建一个对象示例,Foo()()对一个对象进行调用??
Foo()()
运行结果:
True
True
hello call
小结
此时有没有想起装饰器函数, @func,其中func要求是一个可调用的对象,那么现在通过__call__
实现了一个对象示例可调用, 先记住这点,Foo()是一个实例,通过__call__可以让Foo()称为一个可调用对象。
网友评论