装饰器高级使用(了解)

简介: 装饰器高级使用(了解)

开发者学堂课程【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,

执行结果如下:

image.png显示报错,因为需要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开始则为一个轮回。

 

二、开放封闭式原则

开放封闭式原则:

以前写好的代码封闭,通过一些手段对代码进行扩充。

相关文章
|
2月前
|
开发者
ArkTS组件继承的高级用法
本文详细介绍了ArkTS中组件继承的高级用法,涵盖继承的概念、基本用法、多态、接口继承和抽象类的使用。通过具体示例,展示了如何在HarmonyOS应用开发中利用继承实现代码复用、功能扩展和模块化设计,提升开发效率和应用质量。
176 3
|
4月前
|
缓存 开发者 Python
Python编程中的装饰器深入解析
【9月更文挑战第20天】本文将带领读者深入了解Python编程中一个强大且神秘的功能——装饰器。我们将从装饰器的基本概念出发,逐步探索它的工作原理、使用场景以及如何自定义装饰器。文章不仅会用通俗易懂的语言解释复杂的技术概念,还将通过实际代码示例展示装饰器的强大功能和灵活性。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往更高效、更优雅代码编写的大门。
49 11
|
3月前
|
设计模式 缓存 Python
Python编程中的装饰器:从基础到高级应用
【10月更文挑战第7天】 本文深入探讨了Python中装饰器的使用,从基本概念到高级应用全面解析。通过具体示例,读者将能清晰理解装饰器的本质、实现方式及其在代码优化和功能增强中的重要作用。
21 0
|
6月前
|
Python
Python编程实战:利用闭包与装饰器优化日志记录功能
【7月更文挑战第7天】Python的闭包和装饰器简化了日志记录。通过定义如`log_decorator`的装饰器,可以在不修改原函数代码的情况下添加日志功能。当@log_decorator用于`add(x, y)`函数时,调用时自动记录日志。进一步,`timestamp_log_decorator`展示了如何创建特定功能的装饰器,如添加时间戳。这些技术减少了代码冗余,提高了代码的可维护性。
81 1
|
JavaScript 前端开发 编译器
StencilJs 学习之组件装饰器
Stencil 是一个生成 Web Components(更确切地说,是自定义元素)的编译器。Stencil 将最流行的框架的最佳概念结合到一个简单的构建时工具中。 现在让我们一起学习其中的装饰器部分。
117 0
|
8月前
22_自定义装饰器
22_自定义装饰器
122 0
|
8月前
|
数据安全/隐私保护 Python
解释装饰器(decorator)的功能和用法。
解释装饰器(decorator)的功能和用法。
61 1
|
开发者 Python
装饰器的高级使用|学习笔记
快速学习装饰器的高级使用
|
开发者 Python
高级装饰器| 学习笔记
快速学习高级装饰器