python装饰器

无参的装饰函数

1.先定义一个函数,这个函数作为我们的包装函数,用来装饰别人

def filter():
	print(filter)

2.定义一个我们的业务函数,用包装函数来装饰一下,并执行

def filter(func):
	print("filter")	
	return func
	
@filter
def work():
	print("work")
	
work()

@相当于表达式:work = filter(work)

执行work函数,相当于执行了

work = filter(work)
work()

执行结果

filter

work

有参的装饰函数

work的入参a,b通过*args, **kwargs传入。work函数通过func传入,也是通过入参传入。

所以内部定义了两个函数

def ter(abc="default"):
    def fafunc(func):
        def fargfunc(*args, **kwargs):
            func(*args, **kwargs)        
        return fargfunc
    return fafunc
    
@ter("abc")
def work(a,b):
    print "work",a,b
    
work("a",1)
执行结果:

work a 1


类的装饰

类的装饰和函数类似

def a

@a

def class b


b()相当于b() = a(b())

b.func相当于b.func = a.func(b)

def filt(w):
    class color:
        def __init__(self, age):
            self.color = 'black'
            self.wrapped = w(age)
        def display(self):
            print("color is", self.color)
            self.wrapped.display()
    return color
    
@filt
class dog:
    def __init__(self, age):
        self.age = age
    def display(self):
        print("dog age is", self.age)  
            
a = dog(4)
a.display()
执行结果:
('color is', 'black')
('dog age is', 4)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值