美文网首页
Python __call__详解

Python __call__详解

作者: harlan_win | 来源:发表于2019-04-03 15:08 被阅读0次

    https://www.jianshu.com/p/e1d95c4e1697?utm_source=oschina-app

    3、call
    call方法提供给对象可以被执行的能力,就像函数那样,而本质上,函数就是对象,函数就是一个拥有call方法的对象。拥有call方法的对象,使用callable可以得到True的结果,可以使用()执行,执行时,可以传入参数,也可以返回值。所以我们可以使用call方法来实现实例化对象作为装饰器:

    检查一个函数的输入参数个数, 如果调用此函数时提供的参数个数不符合预定义,则无法调用。

    单纯函数版本装饰器

    def args_num_require(require_num):
    def outer(func):
    def inner(*args, **kw):
    if len(args) != require_num:
    print('函数参数个数不符合预定义,无法执行函数')
    return None

            return func(*args, **kw)
        return inner
    return outer
    

    @args_num_require(2)
    def show(*args):
    print('show函数成功执行!')

    show(1) # 函数参数个数不符合预定义,无法执行函数
    show(1,2) # show函数成功执行!
    show(1,2,3) # 函数参数个数不符合预定义,无法执行函数

    检查一个函数的输入参数个数,

    如果调用此函数时提供的参数个数不符合预定义,则无法调用。

    实例对象版本装饰器

    class Checker:
    def init(self, require_num):
    self.require_num = require_num

    def __call__(self, func):
        self.func = func
    
        def inner(*args, **kw):
            if len(args) != self.require_num:
                print('函数参数个数不符合预定义,无法执行函数')
                return None
    
            return self.func(*args, **kw)
        return inner
    

    @Checker(2)
    def show(*args):
    print('show函数成功执行!')

    show(1) # 函数参数个数不符合预定义,无法执行函数
    show(1,2) # show函数成功执行!
    show(1,2,3) # 函数参数个数不符合预定义,无法执行函数

    相关文章

      网友评论

          本文标题:Python __call__详解

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