Python-装饰器
装饰器
开放封闭原则:软件实体应该是可扩展,而不可修改的,也就是说,对扩展是开放的,而对修改是封闭的(面向对象原则的核心)
装饰器的作用:在不更改原功能函数内部代码,并且不改变调用方法的情况下为原函数添加新的功能。
装饰器应用场景:
- 登录验证
- 函数运行时间统计
- 执行函数之前做准备工作
- 执行函数后清理功能
装饰器原理阐述:将被装饰的函数当做一个参数传到装饰器中,并且让被装饰器的函数名指向装饰器内部的函数,
在装饰器的内部函数中用接收到的参数在调用被装饰的函数。
1、实现一个装饰器
1 def login(func): 2 def fun(): 3 username = "python" 4 password = "123456" 5 user = input("请输入账户名") 6 pwd = input("请输入密码") 7 if username == user and password == pwd: 8 func() 9 else: 10 print("账户名或者密码错误") 11 return fun 12 13 @login # 装饰器 >>> index = login(index) 14 def index(): 15 print("这个是网站的首页") 16 17 index()
2、带参数的装饰器
1 # 装饰器 2 def add(func): 3 def fun(a, b): 4 print(a * b) 5 print(a - b) 6 print(a / b) 7 func(a, b) 8 return fun 9 10 @add 11 def add_num(a, b): 12 print(a+b) 13 14 add_num(11,22)
3、通用装饰器
1 # 通用装饰器 可传参、可不传 2 3 def add(func): 4 def fun(*args, **kwargs): 5 print("装饰器功能代码") 6 func(*args, **kwargs) 7 return fun 8 @add 9 def index(): 10 print("这个是网站的首页") 11 @add 12 def goods(num): 13 print("这是商品列表第 %s 页" % num) 14 15 index() 16 goods(1)
4、类装饰器
1 def add(func): 2 def fun(*args, **kwargs): 3 print("装饰器功能代码") 4 return func(*args, **kwargs) 5 return fun 6 7 @add # >>> MyClass = add(MyClass) 8 class MyClass: 9 10 def __init__(self, name, age): 11 self.name = name 12 self.age = age 13 14 15 m = MyClass("Alan","18") 16 print("m的值" , m)

浙公网安备 33010602011771号