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

第3篇:封装——公有、私有与property

封装——公有、私有与property封装是面向对象编程的核心概念之一在Python中通过命名约定和特定机制实现。以下是逐步解析1. 封装的含义封装包含两层含义数据与行为捆绑对象同时包含数据属性和操作数据的方法行为形成一个整体。信息隐藏对外只暴露必要接口隐藏内部实现细节提高代码安全性和可维护性。Python通过约定和工具如property实现这一目标。2. 公有与私有属性Python没有严格的访问控制但通过命名约定区分属性可见性。2.1 单下划线_name表示“受保护”属性暗示外部代码不应直接访问但Python不会强制阻止。classPerson:def__init__(self,name):self._namename# 受保护属性2.2 双下划线__name通过名称修饰Name Mangling避免意外访问属性名被改为_ClassName__name。classAccount:def__init__(self,balance):self.__balancebalance# 实际存储为 _Account__balanceaccAccount(100)# print(acc.__balance) # 报错AttributeErrorprint(acc._Account__balance)# 输出100不推荐直接访问双下划线主要用于防止子类属性冲突并非真正私有。3.property装饰器property将方法转为属性调用允许在访问时添加逻辑如验证、计算。classTemperature:def__init__(self,celsius):self._celsiuscelsiuspropertydefcelsius(self):returnself._celsiuscelsius.setterdefcelsius(self,value):ifvalue-273.15:raiseValueError(低于绝对零度)self._celsiusvaluepropertydeffahrenheit(self):returnself._celsius*9/532# 使用示例tTemperature(25)print(t.celsius)# 25t.celsius30# 调用setterprint(t.fahrenheit)# 86.0# t.celsius -300 # 抛出异常外部像访问属性一样使用但内部可以嵌入逻辑。4. 描述符Descriptor描述符是实现__get__,__set__,__delete__的类用于管理属性逻辑是property的底层机制。classPositiveNumber:def__set_name__(self,owner,name):self.namenamedef__get__(self,instance,owner):returninstance.__dict__.get(self.name)def__set__(self,instance,value):ifvalue0:raiseValueError(必须是正数)instance.__dict__[self.name]valueclassOrder:quantityPositiveNumber()pricePositiveNumber()def__init__(self,quantity,price):self.quantityquantity self.priceprice# 使用orderOrder(5,10)# order.quantity -1 # 抛出异常描述符使属性逻辑可重用常用于ORM框架。5. 封装的好处降低耦合调用者不依赖内部实现便于重构。增加安全性防止非法状态如负余额。简化使用用户只需了解公开接口无需深入细节。6. 实战银行账户封装完整示例展示封装的实际应用classBankAccount:def__init__(self,owner,initial_balance0):self.ownerowner self.__balanceinitial_balance# 私有属性self.__transaction_log[]# 私有日志propertydefbalance(self):returnself.__balancedefdeposit(self,amount):ifamount0:self.__balanceamount self.__log(f存款 {amount})else:raiseValueError(存款金额必须为正)defwithdraw(self,amount):if0amountself.__balance:self.__balance-amount self.__log(f取款 -{amount})else:raiseValueError(余额不足或金额无效)def__log(self,msg):# 私有方法self.__transaction_log.append(msg)defget_history(self):returnself.__transaction_log.copy()# 返回副本防止外部修改# 使用accBankAccount(Alice,100)acc.deposit(50)print(acc.balance)# 150print(acc.get_history())# [存款 50]外部只能通过公开方法交互内部状态被隐藏。7. 常见误区过度使用私有属性Python哲学是“信任开发者”通常单下划线提示足够。property与属性混淆如果同时有self._x和property的xsetter会覆盖直接赋值。描述符命名冲突需确保实例属性键名唯一如self._name。8. 小结Python通过命名约定_name,__name和property实现封装。property支持属性访问时的自定义逻辑。描述符提供可重用的属性管理机制。良好封装提升代码健壮性和可维护性。思考题User类实现要求User类包含用户名和密码密码通过property设置时进行哈希存储获取时返回掩码。importhashlibclassUser:def__init__(self,username,password):self.usernameusername self._password_hashNone# 初始化为空self.passwordpassword# 通过setter设置propertydefpassword(self):return******# 获取时返回掩码password.setterdefpassword(self,value):ifnotvalue:raiseValueError(密码不能为空)# 使用SHA-256哈希存储self._password_hashhashlib.sha256(value.encode()).hexdigest()defverify_password(self,input_password):# 验证密码input_hashhashlib.sha256(input_password.encode()).hexdigest()returninput_hashself._password_hash# 使用userUser(admin,secure123)print(user.password)# 输出: ******print(user.verify_password(secure123))# Trueprint(user.verify_password(wrong))# False此实现确保密码安全存储外部访问时只显示掩码。

相关文章:

第3篇:封装——公有、私有与property

封装——公有、私有与property 封装是面向对象编程的核心概念之一,在Python中通过命名约定和特定机制实现。以下是逐步解析: 1. 封装的含义 封装包含两层含义: 数据与行为捆绑:对象同时包含数据(属性)和操作…...

如何修复 Flexbox 布局在移动端失效的问题:关键在于容器宽度与响应式约束

本文详解为何基于 Flexbox 构建的输入框组件在桌面端正常、却在移动端布局错乱,并给出精准修复方案——核心是为 .inputs 容器显式声明 width: 100%,同时补充 viewport 设置、弹性子项行为修正及移动端交互优化建议。 本文详解为何基于 flexbox 构建…...

手机设置手动代理后,小程序进不去,提示“运行环境加载失败2101”

问题分析在进行小程序测试时候,用到Fiddler或者Charles抓包,都要在手机设置手动代理配置后进行抓包。在手机配置手动代理后,手机没办法上网,所有小程序打不开。点击小程序,提示“运行环境加载失败2101”。怀疑是证书或…...

别再只用if-else了!用Simulink Stateflow Chart模块给你的算法加个‘状态’(附代码生成分析)

从条件分支到状态思维:用Simulink Stateflow重构复杂算法逻辑 在汽车电子和工业控制领域,工程师们常常需要处理多模态的系统行为。传统做法是用if-else或Switch模块搭建决策树,但当系统状态超过三个、状态转移条件涉及多个传感器输入时&#…...

Python基础-[面试]-救急知识速背

基础语法(15题)【基础语法】 问题:Python代码块是通过什么方式划分的? 答案:通过缩进(通常4个空格)划分代码块。【基础语法】 问题:Python中单行注释使用什么符号? 答案&…...

AI周报 | 算力涨价近半、融资965亿、AI开始像真人员工

日期:2026年4月13日—4月19日 本周最厉害的三件事: 1️⃣ 超级聪明的AI程序一个接一个发布,像比赛一样。 2️⃣ AI已经学会“自己动脑子、自己干活、自己记经验”了。 3️⃣ 全世界对“AI算力”(也就是AI的“脑力工厂”&#xff0…...

AVIF 与 PNG:下一代图像格式如何改变网页视觉与性能

随着互联网对高质量图像和快速加载速度的要求不断提高,图像格式也在不断进化。从早期的 JPEG、PNG,到如今逐渐普及的 WebP 和 AVIF,图像技术正在经历一场深刻的变革。 其中,AVIF 是近年来最受关注的新一代图像格式之一&#xff0…...

Session Startup:中描述的md文件是代码读取,还是 AI 操作?

Session Startup:文件是代码读取,还是 AI 操作? 核心结论:代码已经读取,Session Startup 只是声明。 🎯 直接答案 代码已经读取,Session Startup 只是声明。 📊 对比分析 项目 实际情况 谁读取文件? 代码,不是 AI 何时读取? 在 AI 启动前,系统构建 prompt 时 Se…...

初阶linux2( Linux 环境基础开发工具使用指南)

📚 目录(俏皮版) 🍳 一、软件管家 yum —— 做饭先备料 查看菜谱(软件包) 点菜安装 撤菜卸载 文件搬运工 rzsz ✍️ 二、编辑器 vim —— 键盘上的指尖芭蕾 三种核心模式 基本操作:进、写、退 正…...

imFile下载管理器:从零开始构建你的高效下载工作流

imFile下载管理器:从零开始构建你的高效下载工作流 【免费下载链接】imfile-desktop A full-featured download manager. 项目地址: https://gitcode.com/gh_mirrors/im/imfile-desktop 还记得那些焦急等待大文件下载的夜晚吗?当浏览器下载器卡在…...

从20亿美金独角兽到停摆:小冰败给的不是技术,而是这三个致命决策

小冰的崛起:技术理想主义的黄金十年2013年底,微软内部启动了一个特殊的项目。与当时业界专注于"定闹钟、查天气"等任务型AI助手不同,这个团队选择了一条人迹罕至的路径:让AI先学情商,再学智商,尽…...

涨薪技术|Prometheus监控之核心组件简介

各位伙伴,大家好! Prometheus监控对于开发运维工程师来说并不陌生,但是对于测试工程师来说可能还是比较陌生吧!最近也很多小伙伴私信我问prometheus相关问题,所以接下来我会通过连载的方式分享一些关于prometheus如何使用的实践教程。 今天分享:Prometheus的六大核心组件…...

吊车地基承载力计算全攻略:从地勘报告到路基箱铺设,一文讲透

编者按:在上期推文中,我们系统梳理了大型重物吊装方案编制的全流程。其中,“地基承载力验算”被称为“吊车翻车的元凶”——很多吊装事故不是钢丝绳断了,而是脚下地基塌了。本期我们就来专题讲解:吊装作业地基承载力到…...

爱毕业(aibiye)为数学建模论文提供高效复现与智能排版的一体化解决方案

还在为论文写作头痛?特别是数学建模的优秀论文复现与排版,时间紧、任务重,AI工具能帮上大忙吗?今天,我们评测10款热门AI论文写作工具,帮你精准筛选最适合的助手。 aibiye:专注于语法润色与结构…...

如何将微信读书笔记转化为结构化知识资产:Obsidian Weread插件深度指南

如何将微信读书笔记转化为结构化知识资产:Obsidian Weread插件深度指南 【免费下载链接】obsidian-weread-plugin Obsidian Weread Plugin is a plugin to sync Weread(微信读书) hightlights and annotations into your Obsidian Vault. 项目地址: https://gitco…...

跨境远程办公新体验!拖拽传文件让跨国协作丝滑不卡顿

跨境打工人集合!常年跨国协作、异地对接还总被远程办公难题绊住脚遇上跨国网络延迟高,操控卡顿半天没反应想远程协助同事,传大文件限速又麻烦,几百兆素材要等半小时,简直太影响效率了!别愁!跨境…...

Dify对接API、数据库、AI模型全流程详解:3小时搭建可交付智能应用(附完整YAML模板)

第一章:Dify低代码平台集成教程概览Dify 是一款开源的 LLM 应用开发平台,支持通过可视化界面快速构建 AI 原生应用(如聊天机器人、知识库问答、自动化工作流等),同时提供标准化 API 与灵活的 SDK 集成能力。本章聚焦于…...

华为Pura 90系列发布 | 小艺解锁全新交互方式 更能干更懂你!

4月20日,华为Pura系列及全场景新品发布会正式举行,华为Pura X Max、华为Pura 90系列等众多产品上新。在发布会上,华为也正式推出业界首个“伴随式AI解决方案”,全新升级小艺智慧大脑,推动AI交互迈入“持续在场、适时服…...

BEV:典型BEV算法总结

核心差异: 1. 视角转换 1)显示视角转换:FastBEV(IPM),BEVDepth(LSS); 2)隐式视角转换:DETR3D(query-based单参考点采样)&a…...

Python logging日志模块详解

在Python自动化测试(尤其是接口自动化)和日常开发中,日志是定位问题、跟踪程序运行状态的核心工具。logging作为Python标准库中的内置模块,无需额外安装,即可提供灵活、强大的日志记录功能,既能输出日志到控…...

Python无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案

前言 今天在给一个同学远程部署项目的时候,在使用 pip 下载项目所需要的模块时,出现了如下问题: pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 请检查名称的拼写,如果包括路径,请确保路径…...

2026山东大学软件学院创新项目实训博客(三)

2026.4.15-2026.4.20 1. 工作内容 本周依据项目总体架构设计、数据库设计、开发文档设计、项目流程图设计、接口文档,使用Codex完成了项目骨架搭建,并对AI生成代码进行了分析和拆解,便于其他小组成员快速理解项目骨架,进行其他功…...

WarcraftHelper:3步搞定魔兽争霸III终极优化方案

WarcraftHelper:3步搞定魔兽争霸III终极优化方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在现代Windows系统上的…...

SCI 论文 Abstract 中 100 + 学术句式(1)

前序系列我们已经完整拆解了 SCI 论文 Methods 部分的 130 学术句式,搞定了论文的核心实验部分。但很多同学反馈,写完论文,最头疼的是 Abstract 摘要:写短了说不清楚创新点,写长了像流水账,开头空洞无物&a…...

大模型分类全景图:文本、视觉、视频、多模态——区别在哪?怎么选?能跨界干活吗?

大模型不是“越大越好”,而是像不同工种的特种兵:文本模型是笔杆子秘书,视觉模型是火眼金睛质检员,视频模型是剪辑导演二合一,而多模态模型是能边看边说、边听边写的全能翻译官。下面用真实能力对比表 可运行代码示例…...

卡梅德生物技术快报|SPR 技术应用|基于 SPR 亲和力的中药活性成分筛选系统实现与数据分析

摘要表面等离子共振(SPR)是生物分子互作分析的核心技术,本文以连翘活性成分筛选为案例,详细讲解SPR 亲和力筛选的实验搭建、芯片偶联、垂钓富集、液质鉴定、分子模拟、动力学拟合全流程,给出可工程化复现的技术方案&am…...

3步搞定Windows系统优化:WinUtil终极解决方案

3步搞定Windows系统优化:WinUtil终极解决方案 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 你是否厌倦了每次重装系统后要手动安…...

精准控制每一像素:WindowResizer 让Windows窗口管理更自由

精准控制每一像素:WindowResizer 让Windows窗口管理更自由 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为Windows窗口尺寸限制而烦恼吗?当老旧软件窗…...

从零到一:我用 Nexent 打造了一个“旅行规划师“智能体,让行程安排自动化

前言 作为一个每年至少出去旅行两三次的人,每次做攻略都是一场"修行"——查景点、看天气、找酒店、比机票……信息分散在十几个 App 里,往往花一整天也理不出个清晰的行程。一直想有个 AI 助手能帮我把这些事一次性搞定,但要么不够…...

qmc-decoder完整指南:3分钟快速解密QQ音乐加密音频文件

qmc-decoder完整指南:3分钟快速解密QQ音乐加密音频文件 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder qmc-decoder是一款专业高效的QQ音乐加密音频文件解密工具…...