美文网首页
Python装饰器12-类的__call__方法

Python装饰器12-类的__call__方法

作者: dnsir | 来源:发表于2019-06-15 12:54 被阅读0次

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()称为一个可调用对象。

相关文章

网友评论

      本文标题:Python装饰器12-类的__call__方法

      本文链接:https://www.haomeiwen.com/subject/zbfbfctx.html