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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DJI RONIN 4D变0字节恢复案例

RONIN 4D这个产品听起来比较陌生,还是DJI大疆出品。没错,这是大疆进军影视级的重点明星机型。前阵子刚处理过大疆RONIN 4D的修复案例,下边这个案例是和exfat有关的老问题:文件长度变成0字节。 故障存储:希捷18T /MS Exfat文件系统。 故障现…

uniapp实现点击选项跳转到应用商店进行下载

uni-app 中如何打开外部应用,如:浏览器、淘宝、AppStore、QQ等 https://ask.dcloud.net.cn/article/35621 Android唤起应用商店并跳转到应用详情页 兼容处理多个应用商店的情况 https://juejin.cn/post/6896399353301516295 如何查看market://detail…

如何借助CRM系统获得直观的业务洞察?CRM系统图表视图解析!

Zoho CRM管理系统在优化客户体验方面持续发力,新年新UI,一波新功能正在赶来的路上。今天要介绍的新UI功能在正式推出之前,已经通过早鸟申请的方式给部分国际版用户尝过鲜了。Zoho CRM即将推出图表视图,将原始数据转换为直观的图表…

低代码开发平台-企业级可视化快速开发工具

一、你们是否也遇到了以下问题 (1)作为传统型的软件公司,你们是否也遇到以下困扰: (2)作为大型企业软件开发部,你们是否也遇到以下困扰: 二、低代码平台介绍 MSPF快速开发平台是一…

​如何使用 ArcGIS Pro 分析爆炸波及建筑

假设在某栋建筑内发生了爆炸,需要根据爆炸的范围分析出来波及的建筑,对于这一需求,我们可以通过ArcGIS Pro来实现,这里为大家介绍一下分析的方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载…

C语言数据类型范围概述

int范围: -2147483648~2147483647 (-2^31~2^31-1) unsigned int范围: 0~4294967295 (0~2^32-1) long 范围:-2147483648~2147483647 (-2^31~2^31-1) long long 范围: -9223372036854775808~ 9223372036854775808(-2^63~2^63-1)

30个Linux性能问题诊断思路

文章目录 在Linux系统性能问题诊断过程中,有许多关键的检查点和技术可以用来识别潜在的问题源头。以下是30个Linux性能问题诊断思路的概览,包括但不限于: 系统负载监控: 使用uptime查看当前系统运行时间、在线用户数以及1/5/15分钟…

系列学习前端之第 5 章:学习 ES6 ~ ES11

1、什么是 ECMAScript ECMAScript 是由 Ecma 国际通过 ECMA-262 标准化的脚本程序设计语言。 从第 6 版开始,发生了里程碑的改动,并保持着每年迭代一个版本的习惯。 ES62015年,ES72016年,ES82017年,ES92018年&#…

数据库板块

数据库软件: 关系型数据库: Mysql Oracle SqlServer Sqlite 非关系型数据库: Redis NoSQL 1.数组、链表、文件、数据库 数组、链表: 内存存放数据的方式(代码运行结束、关机数据丢失) 文件、数据…

MathType2024官方原版补丁包下载

MathType 7是一款功能强大的数学公式编辑器,广泛应用于各种文档和演示中,用于创建和编辑复杂的数学公式。下面我将详细介绍MathType 7的主要功能和使用方法,以及一些使用技巧。 一、主要功能 公式编辑:MathType 7提供了一个直观…

VS 调试Hololens 2工程报错 有未经处理的异常: Microsoft C++ 异常:

原因是unity 少安装了XR工具包 安装完后重新用unity打包,然后vs打开打包出来的工程,电脑和眼镜用usb连接,直接运行调试就可以了

养鸭场的污水怎么处理

养鸭场的污水怎么处理 养鸭场废水处理是现代农业管理中至关重要的环节之一。随着养殖业规模的扩大和环保要求的提高,有效处理养鸭废水已成为一个迫切的挑战。本文将介绍养鸭场废水的特点及处理方法,并重点讨论各种先进的废水处理设备,包括生物…

word中图片位置问题(后续遇到问题再更新)

问题1:图片插入后显示不全 具体表现为:复制黏贴、或者插入图片后,出现插入的图片显示不全,或者不显示。 例如: 这是因为:图片被设定了固定行距 解决方案:ctrl1 效果: 问题2&am…

Elasticsearch进阶篇(一):Elasticsearch写入原理深入详解

Elasticsearch写入原理深入详解 1. ES相关问题 引用官方文档地址:分片内部原理 | Elasticsearch: 权威指南 | Elastic 为什么Elasticsarch是近实时,而不是准实时? 为什么文档的CRUD (创建-读取-更新-删除) 操作是实时的? Elast…

FineReport报表如何在单元格中显示本地图片(图片地址已存储到MySQL数据库中)

帆软帮助文档对应查看链接:https://help.fanruan.com/finereport/doc-view-854.html?source4#需求:在设计FineReport报表时,想在单元格中显示图书信息对应的图片,图片路径已存储到MySQL数据库中 一、查询数据库 查询MySQL中图书…

为什么defineProps宏函数不需要从vue中import导入?

前言 我们每天写vue代码时都在用defineProps,但是你有没有思考过下面这些问题。为什么defineProps不需要import导入?为什么不能在非setup顶层使用defineProps?defineProps是如何将声明的 props 自动暴露给模板? 举几个例子 我们…

【算法面试题】-06

智能成绩表 题目描述 小明来到学校当老师&#xff0c;需要将学生按考试总分或单科分数进行排名&#xff0c;你能帮帮他吗&#xff1f; 输入描述 第 1 行输入两个整数&#xff0c;学生人数 n 和科目数量 m。 0 < n < 100 0 < m < 10 第 2 行输入 m 个科目名称&…

Singularity(三)| 将docker转化为singularity容器

Singularity&#xff08;三&#xff09;| 将docker转化为singularity容器 Singularity 容器格式 Singularity 容器存在两种不同的格式&#xff08;或者称为状态&#xff09;&#xff1a; 适用于生产的压缩的 只读 singularity 镜像文件&#xff08;Singularity Image File&…

果冻废水处理设备的技术特点

诸城市鑫淼环保小编带大家了解一下果冻废水处理设备的技术特点 1.果冻废水处理设备的工作原理 果冻废水处理设备采用了先进的物理、化学和生物处理技术&#xff0c;通过预处理、沉淀、生化处理等步骤&#xff0c;将果冻废水中的有害物质去除或转化为无害物质&#xff0c;从而达…

探索机器学习:智能时代的魔法

在智能科技的浪潮中&#xff0c;机器学习如同一股神秘的力量&#xff0c;悄然改变着我们的世界。它不仅仅是编程代码的延伸&#xff0c;更是一种让机器通过“学习”来解决问题的魔法。本文将带你深入了解机器学习的奥秘&#xff0c;探索它的世界&#xff0c;并展望未来的无限可…