python带参数的装饰器_python -- 带有参数的装饰器

1.带有参数的装饰器示例

def decorator(arg1, arg2):

def real_decorator(func):

def wrapper(*args, **kwargs):

print("You decorated a function that does something with %s and %s" % (arg1, arg2))

func(*args, **kwargs)

return wrapper

return real_decorator

@decorator("args1", "args2")

def print_args(*args):

for arg in args:

print(arg)

print_args(1, 2, 3)

测试结果

>>> print_args(1, 2, 3)

You decorated a function that does something with args1 and args2

1

2

3

>>>

2.基于类的装饰器

class MyDecorator(object):

def __init__(self, func_to_decorate):

print("init MyDecorator")

self.func_to_decorate = func_to_decorate

def __call__(self, *args, **kwargs):

print("call MyDecorator")

return self.func_to_decorate(*args, **kwargs)

@MyDecorator

def print_more_args(*args):

for arg in args:

print(arg)

print_more_args(1, 2, 3)

print("------------")

print_more_args(1, 2, 3)

测试结果

init MyDecorator

call MyDecorator

1

2

3

------------

call MyDecorator

1

2

3

3.带有参数的基于类的装饰器

class MyDecoratorWithParams(object):

def __init__(self, arg1, arg2):

print("init MyDecoratorWithParams")

print(arg1)

print(arg2)

def __call__(self, fn, *args, **kwargs):

print("call MyDecoratorWithParams")

def new_func(*args, **kwargs):

print("function has been decorated.")

return fn(*args,**kwargs)

return new_func

@MyDecoratorWithParams("arg1", "arg2")

def print_args_again(*args):

for arg in args:

print(arg)

print_args_again(1, 2, 3)

print("----------------")

print_args_again(1, 2, 3)

测试结果:

init MyDecoratorWithParams

arg1

arg2

call MyDecoratorWithParams

function has been decorated.

1

2

3

----------------

function has been decorated.

1

2

3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值