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

python学习笔记 | 11.2、面向对象高级编程-使用@property

一、先搞懂我们为什么要用 property1. 原始问题直接给对象赋值没法检查数据是否合法class Student: pass s Student() s.score 9999 # 成绩不可能是9999完全不合理2. 笨办法解决太麻烦写get_xxx和set_xxx方法手动检查class Student: def get_score(self): return self._score def set_score(self, value): # 检查必须是整数、0-100之间 if not isinstance(value, int): raise ValueError(必须是整数) if value 0 or value 100: raise ValueError(成绩必须0~100) self._score value调用时要写方法一点都不简洁s Student() s.set_score(60) print(s.get_score())3. 终极方案property✅ 既能检查数据✅ 又能二、核心知识点property 怎么用1. 两个关键装饰器property把一个方法变成可读属性getter方法名.setter把一个方法变成可写属性setter用来检查数据2. 固定写法万能模板class 类名: property def 属性名(self): return self._属性名 # 前面加下划线避免重名递归 属性名.setter def 属性名(self, 值): # 这里写数据检查 self._属性名 值3. 重要警告必看属性方法名 ≠ 实例变量名错误写法会无限递归、程序崩溃# ❌ 错误 property def birth(self): return self.birth # 无限调用自己正确写法实例变量前面加下划线_# ✅ 正确 property def birth(self): return self._birth三、超简单实例一看就懂实例 1可读写 数据检查成绩class Student: # 读获取成绩 property def score(self): return self._score # 写设置成绩 检查 score.setter # 方法名.setter**把一个方法变成**可写属性**setter用来检查数据 def score(self, value): if not isinstance(value, int): # 判断数据类型 raise ValueError(成绩必须是整数) if value 0 or value 100: raise ValueError(成绩必须 0~100) self._score value使用效果s Student() s.score 88 # 像属性一样赋值 print(s.score) # 像属性一样读取 s.score 9999 # 报错自动检查保护数据实例 2只读属性不能修改只加property不加 setter就是只读class Student: property def birth(self): return self._birth birth.setter def birth(self, value): self._birth value # 只读属性只能看不能改 property def age(self): return 2025 - self._birth使用效果s Student() s.birth 2000 print(s.age) # 25可以读 s.age 18 # 报错不能修改四、思路总结做题万能思路要给类加可控属性就用property读方法property 返回self._变量写方法变量.setter 数据检查 赋值self._变量只读属性只写property不写 setter变量名前必须加_防止递归崩溃五、课后练习题教程原题 完整答案题目要求给Screen类加上width可读写普通属性height可读写普通属性resolution只读属性 width × height## 五、课后练习题教程原题 完整答案 ### 题目要求 # 给 Screen 类加上 # 1. width可读写普通属性 # 2. height可读写普通属性 # 3. resolution**只读属性** width × height class Screen: ##属性1 property def width(self):#可读 return self._width width.setter #可写 def width(self,value): self._widthvalue ##属性2 property def height(self):#可读 return self._height height.setter #可写 def height(self,value): self._heightvalue ##属性3 只读 property def resolution(self): return self._width*self._height完整答案直接复制运行class Screen(object): # width 可读写 property def width(self): return self._width width.setter def width(self, value): self._width value # height 可读写 property def height(self): return self._height height.setter def height(self, value): self._height value # resolution 只读属性 宽 × 高 property def resolution(self): return self._width * self._height # 测试代码 s Screen() s.width 1024 s.height 768 print(resolution , s.resolution) if s.resolution 786432: print(测试通过!) else: print(测试失败!)运行结果resolution 786432 测试通过!六、必背总结property 让方法像属性一样读xxx.setter 让方法像属性一样写 检查数据实例变量必须用_变量名避免死循环只写property就是只读属性好处代码简单 数据安全分割线理解propertyproperty 作用告诉 Python这个 def 里面写的取数据流程不要当成函数调用直接当成普通属性来用
http://www.zskr.cn/news/1334656.html

相关文章:

  • 中兴B862AV3.2M盒子救砖记:免拆机免ADB,一根双公头线搞定刷机变砖
  • SQL时间盲注实战:从手工探测到Sqlmap自动化,一份完整的Sqli-Labs靶场通关指南
  • 【PI_电源环路】前馈电容Cff对电源环路影响分析
  • 2026年Q2物业托管技术落地要点与靠谱服务商解析 - 优质品牌商家
  • 英雄联盟Akari助手:3大核心价值与5步快速入门完整指南
  • 外部系统调用SAP数据?用ABAP RFC函数搭个“桥梁”其实很简单(含Function Group创建避坑)
  • 终极字体设计指南:如何用免费开源工具打造专业级字体
  • 喜马拉雅音频下载器:三分钟学会下载付费专辑的完整方案
  • 多场景互动抽奖公众号管理系统
  • 限时解锁!Midjourney Pro用户专享的「智能相机预设库」:含21套按焦段(16mm广角→135mm长焦)与场景(夜景/逆光/微距)精准匹配的参数包
  • Sora 2支持128秒原生生成,Veo 2实现零延迟分镜编排——2024视频AI生产力革命,你选哪条技术路径?
  • 从“手艺活”到“人机共创”:游戏和动画用3D建模的范式转移
  • 仅限前500名开发者获取:DeepSeek官方未公开的AWS CloudFormation模板库(含自动扩缩容+Prometheus监控告警)
  • 浙江大学揭秘:为什么AI画图时“记住噪声“能让效果提升12倍效率?
  • Windows环境下安装Tomcat,并配置环境变量
  • 别再到处找教程了!手把手教你从官网下载到汉化配置Enterprise Architect 16(附官方UML教程链接)
  • 3大场景深度解析:TestDisk与PhotoRec如何成为数据恢复的终极救星
  • AI从业者的时间管理:如何高效完成AI项目开发任务
  • DeepSeek那些官方不会告诉你的隐藏功能,用好3个算你厉害
  • 统信UOS离线部署实战:手把手教你用yum缓存提取sshpass等软件包(附完整命令)
  • 超越官方TabBar:打造高交互小程序导航的3个高级技巧(附动态隐藏方案)
  • 2026适合布局沙特的热门行业有哪些
  • LangGraph 到底有什么用?一文讲透 AI Agent 工作流
  • 给嵌入式Web服务器加个“胃”:手把手教你用lwIP-2.1.3的httpd处理POST表单数据(含内存管理避坑)
  • 如何在Windows 11上快速安装Android应用?终极APK安装器完全指南 [特殊字符]
  • Excel里用RANDBETWEEN和DEC2HEX造UUID?小心这3个坑!
  • hot100 电话号码的字母组合(17)
  • 【Clickhouse从入门到精通】第48篇:ClickHouse Distributed引擎原理——分布式读写核心流程
  • CarSim建模避坑指南:车轮中心、方向与柔性,新手最易踩的3个坑
  • 哈尔滨博恩医院痛风风湿病“帮益帮”公益项目 新闻发布会正式启