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)

 

posted @ 2021-03-13 15:54  铲屎官_a  阅读(65)  评论(0)    收藏  举报