系统学习Python——装饰器:“私有“和“公有“属性案例-[使用伪私有、破坏私有和装饰器权衡]

本文主要是介绍系统学习Python——装饰器:“私有“和“公有“属性案例-[使用伪私有、破坏私有和装饰器权衡],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分类目录:《系统学习Python》总目录


使用伪私有

除了泛化,这个版本还使用了Python的_X伪私有保持不变混合功能,通过将这个类的名称自动作为其前缀,就可以把wrapped属性局部化为代理控制类的变量。这避免了上一版本与一个真实的被包装类可能使用的wrapped属性冲突的风险,并且它在类似这样的通用工具中也可以发挥优势。然而它不是很“私有",因为混合版本的名称可以在类之外自由地使用。注意在__setattr__中,我们也必须使用完整扩展的名称字符串onInstance_wrapped’,作为__setattr__中的一个测试值,因为Python将它改写成了这样。

破坏私有

尽管上文的例子确实实现了对一个实例及其类的属性的访问控制,但还是可能以各种方式破坏这些控制一一例如通过显式地检查wrapped属性的扩展版本(bob.pay可能无效,但是完全重整的bob.onlnstance_wrapped.pay可以)。如果我们确实显式地使用重整后的名称倒也是可以访问,不过这些控制对于常规使用来说足够了。当然如果你足够努力地尝试,在其他语言中私有控制通常都可以被破坏(#define private public在某些C++实现中也可能有效)。访问控制可以减少意外修改,但这样的情况大多取决于使用任一种语言的程序员。不管何时,源代码都可能会被修改,无懈可击的访问控制总是有点白日梦的意味。

装饰器权衡

不用装饰器,我们也可以实现同样的结果,通过使用管理器函数或者手动编写装饰器的名称重绑定;然而,装饰器语法使得代码更加一致而显式。这一方法以及任何其他基于包装器的方法的主要潜在缺点是:属性访问导致额外调用,并且被装饰类的实例并不真的是最初的被装饰类的实例一一一例如,如果你用X.__class__isInsrance(X, C)测试它们的类型,将会发现它们是包装器类的实例。除非你计划在对象类型上进行内省,否则类型问题可能是不相关的,并且额外的调用可能基本上适合开发时段;稍后我们将会看到,如果愿意可以使用自动移除装饰的方法。

参考文献:
[1] Mark Lutz. Python学习手册[M]. 机械工业出版社, 2018.

这篇关于系统学习Python——装饰器:“私有“和“公有“属性案例-[使用伪私有、破坏私有和装饰器权衡]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/804450

相关文章

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财