发布时间:2026/6/15 19:45:17
Python 面向对象编程(上)专项练习:6 道编程题从入门到精通
配套专栏:Python 全栈修炼之路 第 10 篇《面向对象编程(上)—— 类与对象》难度分布:⭐ → ⭐⭐ → ⭐⭐ → ⭐⭐⭐ → ⭐⭐⭐ → ⭐⭐⭐⭐核心覆盖:类定义、init、self、类属性 vs 实例属性、访问控制、命名修饰、slots、描述符入门、type/object/class 三角关系题目一:设计一个 Point 类 ⭐📌 题目描述设计一个Point类表示二维平面上的点,支持以下操作:# 创建点p1=Point(3,4)p2=Point(0,0)# 访问坐标print(p1.x,p1.y)# 3 4# 计算到原点的距离print(p1.distance_to_origin())# 5.0# 计算两点间距离print(p1.distance_to(p2))# 5.0# 移动点p1.move(1,1)print(p1)# Point(4, 5)# 支持 == 比较p3=Point(3,4)print(p1==p3)# False(p1 已移动)💡 编程思路这道题考察类定义基础 + 实例属性 + 特殊方法:类定义:使用class Point:定义类,__init__方法初始化x和y坐标。实例方法:distance_to_origin和distance_to计算距离,使用self访问实例属性。修改方法:move方法修改点的位置,展示可变对象的行为。特殊方法:实现__str__和__repr__提供友好的字符串表示,实现__eq__支持==比较。🖥️ 参考代码importmathclassPoint:"""二维平面上的点。"""def__init__(self,x:float=0,y:float=0):"""初始化点的坐标。 Args: x: x 坐标,默认 0 y: y 坐标,默认 0 """self.x=x self.y=ydefdistance_to_origin(self)-float:"""计算到原点 (0, 0) 的距离。"""returnmath.sqrt(self.x**2+self.y**2)defdistance_to(self,other:'Point')-float:"""计算到另一个点的距离。 Args: other: 另一个 Point 对象 Returns: 两点间的欧几里得距离 """dx=self.x-other.x dy=self.y-other.yreturnmath.sqrt(dx**2+dy**2)defmove(self,dx:float,dy:float)-'Point':"""移动点的位置。 Args: dx: x 方向的位移 dy: y 方向的位移 Returns: self,支持链式调用 """self.x+=dx self.y+=dyreturnselfdefclone(self)-'Point':"""创建点的副本。"""returnPoint(self.x,self.y)def__str__(self)-str:"""用户友好的字符串表示。"""returnf"Point({self.x},{self.y})"def__repr__(self)-str:"""开发者友好的字符串表示。"""returnf"Point({self.x!r},{self.y!r})"def__eq__(self,other)-bool:"""支持 == 比较。"""ifnotisinstance(other,Point):returnNotImplementedreturnself.x==other.xandself.y==other.ydef__add__(self,other:'Point')-'Point':"""支持 + 运算:向量相加。"""returnPoint(self.x+other.x,self.y+other.y)def__sub__(self,other:'Point')-'Point':"""支持 - 运算:向量相减。"""returnPoint(self.x-other.x,self.y-other.y)# 测试if__name__=="__main__":p1=Point(3,4)p2=Point(0,0)print(f"p1:{p1}")print(f"到原点距离:{p1.distance_to_origin()}")print(f"p1 到 p2 距离:{p1.distance_to(p2)}")# 移动p1.move(1,1)print(f"移动后:{p1}")# 比较p3=Point(4,5)print(f"p1 == p3:{p1==p3}")# 运算p4=Point(1,2)+Point(3,4)print(f"Point(1,2) + Point(3,4) ={p4}")# 链式调用p5=Point(0,0).move(1,2).move(3,4)print(f"链式移动:{p5}")print("\n所有测试通过 ✓")🔗 关联知识点知识点说明__init__构造方法,初始化实例属性self代表实例本身,访问实例属性__str__/__repr__字符串表示__eq__相等比较__add__/__sub__运算符重载链式调用方法返回self题目二:类属性与实例属性辨析 ⭐⭐📌 题目描述设计一个Counter类,统计创建了多少个实例,同时每个实例有自己的计数:# 类属性:统计所有实例的数量c1=Counter()c2=Counter()print(Counter.total_count)# 2# 实例属性:每个实例独立的计数c1.increment()c1.increment()c2.increment()print(c1.count)# 2print(c2.count)# 1# 类方法获取统计信息print(Counter.get_statistics())# {'total_instances': 2, 'total_increments': 3}💡 编程思路这道题考察类属性 vs 实例属性 + 类方法 + @classmethod:类属性:total_count和total_increments是类属性,所有实例共享,用于全局统计。实例属性:count是每个实例独立的计数。类方法:get_statistics使用@classmethod装饰器,可以访问类属性而不需要实例。初始化计数:在__init__中增加类属性total_count,记录实例创建次数。🖥️ 参考代码classCounter:"""计数器类,演示类属性和实例属性的区别。"""# 类属性:所有实例共享total_instances=0total_increments=0def__init__(self,name:str=""):"""初始化计数器。 Args: name: 计数器名称(可选) """# 实例属性:每个实例独立self.name=nameorf"Counter-{Counter.total_instances+1}"self.count=0# 增加类属性Counter.total_instances+=1defincrement(self)-int:"""增加计数,返回当前值。 Returns: 增加后的计数值 """self.count+=1Counter.total_increments+=1returnself.countdefreset(self)-None:"""重置实例计数。"""# 只重置实例属性,不影响类属性self.count=0@classmethoddefget_statistics(cls)-dict:"""获取全局统计信息。 Returns: 包含 total_instances 和 total_increments 的字典 """return{'total_instances':cls.total_instances,'total_increments':cls.total_increments}@classmethoddefreset_global(cls)-None:"""重置全局统计(谨慎使用)。"""cls.total_instances=0cls.total_increments=0def__str__(self)-str:returnf"{self.name}:{self.count}"def__repr__(self)-str:returnf"Counter(name={self.name!r}, count={self.count})"# 测试if__name__=="__main__":print("=== 创建实例 ===")c1=Counter("A")c2=Counter("B")c3=Counter()# 使用默认名称print(f"总实例数:{Counter.total_instances}")print("\n=== 增加计数 ===")c1.increment()c1.increment()c2.increment()c3.increment()c3.increment()c3.increment()print(f"c1:{c1}")print(f"c2:{c2}")print(f"c3:{c3}")print(f"\n全局统计:{Counter.get_statistics()}")print("\n=== 重置实例计数 ===")c1.reset()print(f"c1 重置后:{c1}")print(f"c2 不受影响:{c2}")print(f"全局统计不变:{Counter.get_statistics()}")print("\n=== 类属性 vs 实例属性陷阱 ===")# 陷阱:通过实例修改类属性c1.total_instances=100# 这创建了一个实例属性!print(f"Counter.total_instances:{Counter.total_instances}")# 还是 3print(f"c1.total_instances:{c1.total_instances}")# 100(实例属性)print(f"c2.total_instances:{c2.total_instances}")# 3(类属性)print("\n所有测试通过 ✓")🔗 关联知识点知识点说明类属性所有实例共享,通过ClassName.attr访问实例属性每个实例独立,通过self.attr访问@classmethod类方法,第一个参数是cls属性查找顺序实例 → 类 → 父类陷阱通过实例赋值会创建实例属性,遮蔽类属性题目三:实现一个安全的属性访问类 ⭐⭐📌 题目描述实现一个SafeBox类,支持密码保护的私有属性访问:box=SafeBox("secret_data",password="1234")# 正确密码可以访问print(box.get_data("1234"))# "secret_data"# 错误密码抛出异常try:box.get_data("wrong"

相关新闻

计算机毕业设计之基于线性回归算法的太原市小店区新能源汽车充电桩需求预测系统设计与实现
2026/6/15 8:57:06

计算机毕业设计之基于线性回归算法的太原市小店区新能源汽车充电桩需求预测系统设计与实现

本研究设计并实现了一个基于线性回归算法的充电桩充电桩预测系统,综合运用了Vue、Spider、Django和Python等技术。系统前端采用Vue框架,构建了直观、易用的用户界面,实现了数据可视化展示和交互功能。通过Spider技术,系统自动爬取…

阅读更多
中草药照片一键识别工具:Python写的毕业设计级图像分类系统(带代码+文档+测试图)
2026/6/15 19:38:22

中草药照片一键识别工具:Python写的毕业设计级图像分类系统(带代码+文档+测试图)

本文还有配套的精品资源,点击获取 简介:直接拖进图片就能认出是哪种中药——这个项目用Python实现了一个开箱即用的中草药图像识别工具。支持常见中药材实物照片输入,自动输出中文药名和类别,背后是轻量但有效的深度学习模型。…

阅读更多
告别枯燥理论:用STC89C52的流水灯项目,一次性搞懂C语言的变量、运算符和Keil C51优化
2026/6/4 8:56:34

告别枯燥理论:用STC89C52的流水灯项目,一次性搞懂C语言的变量、运算符和Keil C51优化

从流水灯实战中掌握C语言核心:变量、运算符与Keil调试技巧当你第一次拿到STC89C52开发板时,最令人兴奋的莫过于让LED灯按照你的意愿流动起来。这个看似简单的流水灯项目,实际上蕴含着C语言编程的三大核心要素:变量类型选择、位运算…

阅读更多
WSABuilds完整指南:Windows安卓子系统终极解决方案
2026/6/15 18:57:58

WSABuilds完整指南:Windows安卓子系统终极解决方案

WSABuilds完整指南:Windows安卓子系统终极解决方案 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root soluti…

阅读更多
如何快速上手DDSP-SVC:免费开源歌唱语音转换完全指南
2026/6/15 18:57:58

如何快速上手DDSP-SVC:免费开源歌唱语音转换完全指南

如何快速上手DDSP-SVC:免费开源歌唱语音转换完全指南 【免费下载链接】DDSP-SVC Real-time end-to-end singing voice conversion system based on DDSP (Differentiable Digital Signal Processing) 项目地址: https://gitcode.com/gh_mirrors/dd/DDSP-SVC …

阅读更多
如何用GenomicSEM解锁多性状遗传分析:从新手到专家的完整指南
2026/6/15 18:57:58

如何用GenomicSEM解锁多性状遗传分析:从新手到专家的完整指南

如何用GenomicSEM解锁多性状遗传分析:从新手到专家的完整指南 【免费下载链接】GenomicSEM R-package for structural equation modeling based on GWAS summary data 项目地址: https://gitcode.com/gh_mirrors/ge/GenomicSEM GenomicSEM是一款基于GWAS汇总…

阅读更多
Windows新窗口被旧窗口挡住?一个注册表值搞定
2026/6/15 18:57:58

Windows新窗口被旧窗口挡住?一个注册表值搞定

事情是这样的。昨天帮一个朋友搞电脑,他说了个特别离谱的问题。就是他在用电脑的时候,不管打开什么程序,新窗口都不会自己弹到前面来。记事本、浏览器、计算器,甚至连那个让你输入密码的UAC弹窗都被挡在后面。得手动去任务栏点一下…

阅读更多
Hippo4j 线程池监控平台部署手册
2026/6/15 18:57:58

Hippo4j 线程池监控平台部署手册

文章目录Hippo4j 线程池监控平台部署手册1. 登录虚拟机2. 检查基础环境3. 下载 Hippo4j Server4. 初始化 MySQL 数据库5. 修改 Hippo4j 配置6. 启动 Hippo4j Server7. 验证启动状态8. 访问控制台9. 停止 Hippo4j10. 重启 Hippo4j11. 常见问题端口 6691 被占用数据库连接失败页面…

阅读更多
CS Demo Manager:从零到精通的CS比赛录像分析解决方案
2026/6/15 17:57:58

CS Demo Manager:从零到精通的CS比赛录像分析解决方案

CS Demo Manager:从零到精通的CS比赛录像分析解决方案 【免费下载链接】cs-demo-manager Companion application for your Counter-Strike demos. 项目地址: https://gitcode.com/gh_mirrors/cs/cs-demo-manager 还在为堆积如山的CS比赛录像而烦恼吗&#xf…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/14 0:57:30

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT:用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域,文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/14 0:57:30

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述:这不是“写提示词”,而是重构人机协作的底层逻辑“Prompt Engineering”这个词,这两年被讲得太多,也太轻飘。很多人把它理解成“给AI发指令的技巧”,甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/14 0:57:30

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊,而是因为熟悉&…

阅读更多
TEKLauncher:终极ARK模组管理与性能优化解决方案
2026/6/15 0:57:55

TEKLauncher:终极ARK模组管理与性能优化解决方案

TEKLauncher:终极ARK模组管理与性能优化解决方案 【免费下载链接】TEKLauncher Launcher for ARK: Survival Evolved 项目地址: https://gitcode.com/gh_mirrors/te/TEKLauncher 你是否为ARK: Survival Evolved复杂的模组管理和服务器连接问题而烦恼&#xf…

阅读更多
如何3分钟免费解锁Cursor Pro:终极AI编程助手破解方案
2026/6/15 0:57:55

如何3分钟免费解锁Cursor Pro:终极AI编程助手破解方案

如何3分钟免费解锁Cursor Pro:终极AI编程助手破解方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tri…

阅读更多
21.2 mcp-server-chart 图表化作用
2026/6/15 0:57:55

21.2 mcp-server-chart 图表化作用

如何检查 langchain_mcp_adapters 版本和 antv/mcp-server-chart 安装 1. 检查 langchain_mcp_adapters 版本 在终端(确保已激活虚拟环境)中运行: pip show langchain_mcp_adapters输出示例: Name: langchain-mcp-adapters Ve…

阅读更多
GIT修改用户名
2026/6/14 11:53:59

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/15 2:21:34

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/14 15:49:58

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多