开发者学堂课程【Python 入门 2020年版:装饰器高级使用(了解)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10420
装饰器高级使用(了解)
内容介绍:
一、具体内容
二、开放封闭式原则
一、具体内容
组装一个装饰器,满足条件就可以执行代码,
如:
def check_permission():
,再跟上pass,如果要使用装饰器,即写入@ check_permission。
如果现在进行验证,则要将用户现在的权限传入,写入user_permission,即@ check_permission(user_permission)
,同时需要明确read、write、execute的权限,
如下:
user_permission = 6
READ_PERMISSION = 4
WRITE_PERMISSION = 2
EXE_PERMISSION = 1
如果有权限验证,可以根据内容进行写入:
@ check_permission(user_permission,READ_PERMISSION)
@ check_permission(user_permission,WRITE_PERMISSION)
@ check_permission(user_permission,EXE_PERMISSION)
运用装饰器,写入参数x,y,即def check_permission(x,y):,
同时也需要跟上如下:
def check_permission(x,y) :
print(x,y)
def handle_action() :
def do_action() :
pass
return do_action
return handle_action
此时结构完成搭建,要注意调用read时是被装饰过的,即会调用do_action。
handle_action不需要参数,再运行read,
执行结果如下:
显示报错,因为需要fn,即def handle_action(fn) :。此时调用read、write、execute都会找到do_action,所以可以调用fn,
如下:
def handle_action() :
def do_action() :
fn()
再次进行运行,结果实现运营,读取结果则会进行显示。
在此基础上,如果user_permission为6,为4 + 2,即具有读写权限;如果user_permission为5,为5 + 1,即具有读和execute权限;
如果user_permission为3,为2 + 1,即具有写和execute权限;如果user_permission为7,为4 + 2 + 1,即具有所有权限。此时可以组成7种权限。
x为用户权限,y为需要验证的权限,两者之间验证不能使用减法,这时使用二进制来进行计算,如4为0b100,2为0b010,1为0b001,通过观察最低位来查看是否有权限,如:0b001则具有execute权限;0b010则具有写入的权限;0b100则具有读的权限。
每个位置只要有数字则为有权限,如:5为0b101则具有读和执行权限,而这些v也被称为权限因子。如果此时输入另一个权限,
如下:
def delete() :
print (‘我正在删除内容’)
同时也要写入:
DEL_PERMISSION = 8 #1000
此时排列组合有15种权限。根据以上可以推算出11、13等数字的权限。
此时加入:
@ check_permission(user_permission,DEL_PERMISSION)
通过用户的权限与权限因子做与运算,不等于零则为有权限,写入:
# 用户权限 & 权限因子 != 0
如果与运算后不为零则可以执行。此时可写入:
if x & y ! = 0 : # 有权限,可以执行
fn()
else:
print(‘对不起,您没有响应的权限’)
如果将用户权限改为9,则只有删除与执行权限,注意用户权限数字不宜过大。
如果用户权限改为13,则没有响应的权限,如果用户权限为15则具有所有权限,15则为最大因子,16开始则为一个轮回。
二、开放封闭式原则
开放封闭式原则:
以前写好的代码封闭,通过一些手段对代码进行扩充。