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) # 函数参数个数不符合预定义,无法执行函数
网友评论