python 装饰器 java,python之各种装饰器的使用

"""

装饰器,带参数的装饰器,类的装饰器

判断是否为可迭代的

from collections import Iterable

print(isinstance([1,2,3],Iterable))

"""

# 1、简单的装饰器

def debug(func):

def wrap():

print(f'debug:func name is {func.__name__}')

return func()

return wrap

@debug

def calculate():

return 1+2

print(calculate())

# 2、装饰器带参数,先接受的是参数,后接受的是函数

def debug(parameter):

def wrapper(func):

def wrap():

print(f'debug:func name is {func.__name__}')

print(f'debug:func parameter is {parameter}')

return func()

return wrap

return wrapper

@debug('testdata')

def calculate():

return 1+2

print(calculate())

# 3、装饰带参数的函数,需要将参数给定义的wrap

def debug(func):

def wrap(a, b):

print(f'debug:func name is {func.__name__}')

return func(a, b)

return wrap

@debug

def calculate(a,b):

return a+b

print(calculate(1,2))

"""

函数修饰函数

4、装饰器带参数,同时装饰的函数也带参数

"""

def debug(parameter):

def wrapper(func):

def wrap(c, d):

print(f'debug:func name is {func.__name__}')

print(f'debug:func parameter is {parameter}')

return func(c, d)

return wrap

return wrapper

@debug('data')

def calculate(c, d):

return c*d

print(calculate(5,7))

"""

函数修饰类

5、带参数的函数装饰器 装饰 带参数的类

"""

def debug(parameter):

def inner(func):

def wrap(a,b):

print("class name:", func.__name__)

print("genrator parameter is:", parameter)

return func(a,b)

return wrap

return inner

@debug('get')

class Calculate(object):

def __init__(self,a,b):

self.a = a

self.b = b

def cal(self):

num = self.a + self.b

return num

def sal(self):

cnum = self.a * self.b

return cnum

c = Calculate(3,4)

print(c.cal())

"""

类装饰函数

6,带参数的类装饰器 修饰 带参数的函数

ini里面接受的是装饰器的参数,如果无参数则接受的是函数名

"""

class Debug(object):

def __init__(self,parameter):

self.parameter = parameter

def __call__(self, func):

def wrap(a,b):

print('function name is', func.__name__)

print('debug parameter is', self.parameter)

return func(a,b)

return wrap

@Debug('post')

def calculate(a,b):

c = a * b

return c

print(calculate(2,5))

"""

类装饰类

7 带参数的类装饰器 装饰 带参数的类

"""

class Debug(object):

def __init__(self, parameter):

self.parameter = parameter

def __call__(self, func):

def wraps(a,b):

print('function name is', func.__name__)

print('debug parameter is', self.parameter)

return func(a,b)

return wraps

@Debug('get')

class Calculate(object):

def __init__(self,a,b):

self.a = a

self.b = b

def cal(self):

num = self.a + self.b * self.a

return num

c = Calculate(5,3)

print(c.cal())

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值