系统学习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

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做