当前位置: 首页 > news >正文

21面向对象描述器

目录

1、什么是描述器?

1、原始的代码可以理解成为这样:

2、增加解释器可以改成如下,解释器就是集增删改查为一体的一个小的property

有一点需要注意的地方是:property里面内置的参数不是get_age()就是不用调用。

3、装饰器可以也放在前面

一些小注意和补缺:self.age=value会发生无限递归,为什么 self.__age = value不会发生无限递归?

4、有一个封装的思想,我觉得以后可能非常重要!!!

5、但是这样写的话,Age()这个就是共享的了


1、什么是描述器?

其实是一个类里面的属性,指向一个特殊的对象,但是这个对象具有:增,删,改,查四种实例方法。在外界尝试去操作一个描述器,解释器会去判断是否是一个描述器,如果是,会自动把外界的赋值操作转化成__Set__操作,转化的操作是解释器自己完成的。不需要人为的操作

1、原始的代码可以理解成为这样:

class Person:def __init__(self):self.__age = 10def get_age(self):return self.__agedef set_age(self,value):if value < 0:value = 0self.age = valuedef del_age(self):del self.__age
p = Person()
p.set_age(-100)
print(p.get_age())
p.del_age()
print(p.get_age())

2、增加解释器可以改成如下,解释器就是集增删改查为一体的一个小的property

class Person:def __init__(self):self.__age = 10def get_age(self):return self.__agedef set_age(self,value):if value < 0:value = 0self.__age = valuedef del_age(self):del self.__ageage = property(get_age,set_age,del_age)name = 'sz'
p = Person()
p.age = 19
print(p.age)

有一点需要注意的地方是:property里面内置的参数不是get_age()就是不用调用。

3、装饰器可以也放在前面

class Person:def __init__(self):self.__age = 10@propertydef age(self):return self.__age@age.setterdef age(self,value):if value < 0:value = 0self.__age = value@age.deleterdef age(self):del self.__age# age = property(get_age,set_age,del_age)# name = 'sz'
p = Person()
p.age = 19
print(p.age)

一些小注意和补缺:self.age=value会发生无限递归,为什么 self.__age = value不会发生无限递归?

答:self.age = value是设置值,self.__age = value是访问私有变量,为啥是访问私有变量?因为在python内部有一个名字重整机制,就是会把__age改成 _类名__age因此,self.__age = value 其实是直接访问了重命名后的属性 _类名__age,而不是通过属性的 setter 方法来设置。这就避免了无限递归的问题。但需要注意的是,这种方式是一种绕过属性的 getter 和 setter 方法的机制,可能会绕过属性的其他逻辑,因此在使用时需要谨慎考虑。

4、有一个封装的思想,我觉得以后可能非常重要!!!

class Age:def __init__(self):self.__age = 10def get_age(self):return self.__agedef set_age(self,value):if value < 0:value = 0self.__age = valuedef del_age(self):del self.__ageclass Person:age = Age()p = Person()
p.age = 19
print(p.age)

另外一个封装的案例

class Age:def __get__(self, instance, owner):print('get')def __set__(self, instance, value):print('set')def __delete__(self, instance):print('我被删除啦')
class Person:age = Age()
p = Person()
p.age = 10
print(p.age)

上面那块的增删改查,全部被封装在Age的这个函数里面了,下面只需要直接调用就可以了~

class的Age也是一个类,但是在Person那块也是一个类,所以可以试着去调用类的方法看看能不能触发set和del的属性

class Age:def __get__(self, instance, owner):print('get')def __set__(self, instance, value):print('set')def __delete__(self, instance):print('我被删除啦')
class Person:age = Age()
# p = Person()
# p.age = 10
# print(p.age)
print(Person.age)
Person.age = 19
del Person.age

结果如下:只会获得,但是不会,set和del了,所以以后用装饰器的时候,还是用对象去操作比较好!

5、但是这样写的话,Age()这个就是共享的了

相关文章:

21面向对象描述器

目录 1、什么是描述器&#xff1f; 1、原始的代码可以理解成为这样&#xff1a; 2、增加解释器可以改成如下&#xff0c;解释器就是集增删改查为一体的一个小的property 有一点需要注意的地方是&#xff1a;property里面内置的参数不是get_age()就是不用调用。 3、装饰器可…...

高校教务系统登录页面JS分析——皖西学院

高校教务系统密码加密逻辑及JS逆向 本文将介绍皖西学院教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习&#xff0c;勿用于非法用途。 一、密…...

单片机综合小项目

一、单片机做项目常识 1.行业常识 2.方案选型 3.此项目定位和思路 二、单片机的小项目介绍 1.项目名称&#xff1a;基于51单片机的温度报警器 &#xff08;1&#xff09;主控&#xff1a;stc51&#xff1b; &#xff08;2&#xff09;编程语言&#xff1a;C语言 &#xff08;…...

docker下的onlyoffice安装(for seafile)

docker镜像拉取 # 拉取 onlyoffice 镜像docker pull onlyoffice/documentserver 创建所需目录 # 创建几个目录 用于 onlyoffice 的数据卷cd /opt# 建议与 seafile 容器都放在 /opt 目录方便管理mkdir seafile-onlyofficecd seafile-onlyofficemkdir logmkdir datamkdir libmkd…...

1 两数之和

解题思路&#xff1a; \qquad 对每个数nums[i]&#xff0c;仅需在数组中搜索target-nums[i]是否存在。 优化思路&#xff1a; \qquad 首先能想到&#xff0c;利用哈希表O(1)查询target-nums[i]。 \qquad 建立map<int, vector<int>>的表能够处理重复元素&#x…...

NewStarCTF2023week2-Unserialize?

代码审计&#xff1a; 定义了一个eval类&#xff0c;该类下有一个私有变量cmd和公有成员函数destruct()&#xff0c;该函数在对象的所有引用都被删除或类被销毁时会自动调用&#xff1b; 调用该函数则会执行一个正则表达式进行正则匹配&#xff0c;过滤掉了一些常用命令和bas…...

OpenMesh 最优选点策略

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 继续沿着之前的思路:OpenMesh 网格顶点Quadric误差计算,有时候,无论是网格简化或是网格平滑,总会涉及到添加一个新的顶点的问题,那么新顶点应该怎么生成呢?以网格的简化操作为例,假设我们要合并两个顶点,也…...

服务器内存总量和内存条有差异是什么问题 103.239.244.X

服务器内存总量和内存条上标注的容量可能会存在一些差异&#xff0c;这是由于以下几个原因&#xff1a; 部分内存被保留给系统和其他硬件设备&#xff1a;在服务器中&#xff0c;一部分内存可能被保留给系统和其他硬件设备&#xff0c;比如显卡、网卡、RAID卡等。这些设备需要一…...

WPF DataGrid详细列表手动显示与隐藏

设置显示序号与折叠显示样式 <DataTemplate x:Key"dtNum"><Button BorderBrush"Transparent" Style"{x:Null}" Click"BtnRowDetail_ShowHideClick" FontSize"16" Background"Transparent"><Stack…...

Compose 组件 - 分页器 HorizontalPager、VerticalPager

一、概念 类似于 ViewPager&#xff0c;1.4 版本之前需要借助 accompanis 库&#xff0c;底层基于 LazyColumn、LazyRow 实现&#xff0c;在使用上也基本相同。默认情况下 HorizontalPager 占据屏幕的整个宽度&#xff0c;VerticalPager 会占据整个高度。 fun HorizontalPager(…...

Web3 招聘 | Bitget、MyShell、imToken、Arweave 多项目招聘中

「Web3 招聘」是 TinTinLand 为 Web3 项目和求职者创建的一个招聘信息汇集专栏。本栏目将持续更新区块链行业招聘信息&#xff0c;满足不同求职者与项目方的多样需求。欢迎各项目方联系 TinTinLand 发布职位需求&#xff0c;欢迎求职者关注 TinTinLand 获取最新招聘信息。 此外…...

通过HTTP发送大量数据的三种方法

在网络的早期时期&#xff0c;人们发送的文件大小仅为几KB。到了2023年&#xff0c;我们享受着高分辨率的MB级别图像&#xff0c;并在几GB的4K&#xff08;即将是8K&#xff09;视频中观看。 即使有良好的互联网连接&#xff0c;下载一个5GB的文件仍然需要一些时间。如果你拥有…...

【MySQL】索引和事物

目录 ♫索引 ♪什么是索引 ♪索引的数据结构 ♪索引的使用 ♫事务 ♪什么是事务 ♪事务的特性 ♪事务的使用 ♫索引 ♪什么是索引 索引是存储在磁盘上的一个数据结构&#xff0c;通过索引可以快速地定位到存储在磁盘上的数据。 索引在提高查询速度的同时&#xff0c;还提…...

win11下的VS2022+QT6+VTK9.2+PCL1.13.1联合开发环境配置及踩坑记录

准备工作&#xff1a; 安装VS2022&#xff1a;这个比较简单&#xff0c;网上随便找个教程就行 安装QT并为VS2022添加QT Creater插件&#xff1a;VS2022配置Qt6_vs2022 qt6-CSDN博客 安装PCL&#xff1a;vs2022配置pcl1.13.1_pcl配置-CSDN博客 安装PCL过程中本身也会安装VTK&…...

CEdit

1、https://www.cnblogs.com/milanleon/p/5626174.html 2、CEdit控件提供访问函数主要有&#xff1a; int GetWindowText(LPCTSTR lpszStringBuf,intnMaxCount) 获取控件文本&#xff0c;与ReadText()功能相同 void SetWindowText(LPCTSTR lpszString) 设置控件文本 void …...

vue3 自定义指令

Vue 除了内置的一系列指令 (比如 v-model 或 v-show) 之外&#xff0c;Vue 还允许你注册自定义的指令。 一个自定义指令由一个包含类似组件生命周期钩子的对象来定义。钩子函数会接收到指令所绑定元素作为其参数。 在setup语法糖中&#xff0c;任何以 v 开头的驼峰式命名的变量…...

用PolarDB|PostgreSQL提升通用ai机器人在专业领域的精准度

目录 背景 基本步骤讲解 Demo 演示 思考 如果不是用openai? 开源社区能干点啥? ai应用 收录专栏&#xff1a;PolarDB for PostgreSQL&#xff0c;后续将会发布PolarDB for PostgreSQL教程&#xff0c;大家感兴趣的话可以点个订阅呀&#xff01; 简介&#xff1a; chat…...

idea中maven plugin提示not found

在终端中输入&#xff1a; mvn dependency:resolve 然后 解决了部分问题 Plugin org.apache.maven.plugins:maven-jar-plugin:3.1.0 not found 改为3.3.0了 Plugin maven-source-plugin:3.3.0 not found 改为 2.4 了 版本下降了 感觉后继有坑 待观察...

Hadoop3教程(七):MapReduce概述

文章目录 &#xff08;68&#xff09; MR的概述&优缺点&#xff08;69&#xff09;MR的核心思想MapReduce进程 &#xff08;70&#xff09;官方WC源码&序列化类型&#xff08;71&#xff09;MR的编程规范MapperReducerDriver &#xff08;72&#xff09;WordCount案例需…...

【Doris实战】Apache-doris-2.0.2部署帮助手册

Apache-doris-2.0.2部署帮助手册 校验时间&#xff1a;2023年10月11日 文章目录 Apache-doris-2.0.2部署帮助手册安装前准备安装包安装要求Linux 操作系统版本需求软件需求句柄需求关闭 Swap网络需求 部署规划用户规划目录规划免密需求 安装步骤配置JDK配置Doris文件 启动与停止…...

3步打造专业级H5页面:开源编辑器h5maker零代码解决方案

3步打造专业级H5页面&#xff1a;开源编辑器h5maker零代码解决方案 【免费下载链接】h5maker h5编辑器类似maka、易企秀 账号/密码&#xff1a;admin 项目地址: https://gitcode.com/gh_mirrors/h5/h5maker 在数字化营销与内容传播领域&#xff0c;H5页面已成为连接品牌…...

AI在测试中的应用:从测试用例生成到缺陷预测

随着软件开发流程向敏捷与DevOps的持续演进&#xff0c;软件测试面临着迭代周期缩短、系统复杂度飙升的双重压力。传统的测试方法&#xff0c;高度依赖人工经验与重复劳动&#xff0c;在效率、覆盖率和预测性上逐渐显现瓶颈。人工智能技术的引入&#xff0c;正从辅助工具演变为…...

曾经我和大模型交流业务实现记录

第一次&#xff1a; 我有一组子组件11个&#xff0c;通过子组件的不同组合&#xff0c;可以组成表单&#xff0c;这些表单让不同的用户使用&#xff0c;表单组成公共的内容&#xff0c;让大部分用户使用&#xff0c;当然用户可以在这些表单的基础上修改一些默认值&#xff0c;变…...

小白必看:霜儿-汉服-造相Z-Turbo从部署到出图全流程解析

小白必看&#xff1a;霜儿-汉服-造相Z-Turbo从部署到出图全流程解析 1. 镜像简介与核心优势 霜儿-汉服-造相Z-Turbo是一款专为汉服写真生成优化的AI模型镜像&#xff0c;基于Xinference框架部署&#xff0c;通过Gradio提供简洁易用的Web界面。与通用文生图模型相比&#xff0…...

深入解析Camera-IMU联合标定:从理论到实践

1. 为什么需要Camera-IMU联合标定&#xff1f; 在机器人定位和三维重建领域&#xff0c;相机和IMU&#xff08;惯性测量单元&#xff09;是最常用的传感器组合。相机能提供丰富的环境特征信息&#xff0c;但在快速运动或弱光环境下容易失效&#xff1b;IMU可以稳定输出运动数据…...

老马失前蹄,竟然在数据库外键上翻车了,重温外键级联

一、什么是setuptools&#xff1f; setuptools 是一个用于创建、分发和安装 Python 包的核心库。 它可以帮助你&#xff1a; 定义 Python 包的元数据&#xff08;如名称、版本、作者等&#xff09;。 声明包的依赖项&#xff0c;确保你的包能够正确运行。 构建源代码分发包&…...

2026做GEO,豆包、DeepSeek、元宝都爱引用哪些媒体?这份清单收好了!

你是不是也发现了这个 “诡异” 的现象&#xff1f;过去&#xff0c;我们拼命讨好搜索引擎的爬虫&#xff0c;优化关键词密度、买外链&#xff0c;只为排在百度搜索结果的第一页。而现在&#xff0c;用户变了。他们不再在搜索框里试错关键词&#xff0c;而是直接打开豆包、Deep…...

论文AIGC全红99%怎么救?2026实测Gemini去痕术:3组指令集联合3大工具,稳稳拉回10%安全线

视角重构&#xff0c;打破“平铺直叙”的机械感 AI生成的最大特征是“正确但平庸的上帝视角”。要ai降ai&#xff0c;第一步不是改词&#xff0c;而是强行植入一个具有批判性的“人类观察者”视角&#xff0c;迫使模型重组叙事逻辑。 核心原理&#xff1a;通过引入“辩证法”…...

3分钟搞定Windows软件安装难题:winget-install终极解决方案

3分钟搞定Windows软件安装难题&#xff1a;winget-install终极解决方案 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh_mirror…...

多层PCB结构设计与过孔工艺全解析

1. 多层PCB内部结构全解析作为一名硬件工程师&#xff0c;第一次拆解十层PCB板时&#xff0c;那种震撼感至今难忘。密密麻麻的过孔像微型城市的地下管网&#xff0c;精密排布的走线堪比神经脉络。今天我就用最直观的立体解剖图&#xff0c;带你看透这些"电子乐高"的搭…...