无参的装饰函数
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)
本文详细介绍了Python装饰器的使用,包括无参装饰函数、有参装饰函数以及类装饰的应用。通过具体示例展示了如何在不同场景下灵活运用装饰器,以及它们在函数和类层面的实现方式。
934

被折叠的 条评论
为什么被折叠?



