发布时间:2026/8/9 16:58:33
Python面向对象:实例属性与类属性的区别澄清 Python面向对象实例属性与类属性的区别澄清一、开篇同一类名下两种属性在Python类中有两种属性实例属性每个对象各自拥有和类属性所有对象共享。混淆这两者是最常见的OOP陷阱之一。⌨️ 先看直观对比classDog:species犬科动物# 类属性——所有狗共享count0# 类属性——统计狗的数量def__init__(self,name,age):self.namename# 实例属性——每只狗独有self.ageage# 实例属性——每只狗独有Dog.count1# 修改类属性dog1Dog(旺财,3)dog2Dog(小黑,1)print(dog1.name,dog1.age)# 旺财 3 —— 实例属性print(dog2.name,dog2.age)# 小黑 1 —— 各不相同print(dog1.species,dog2.species)# 犬科动物 犬科动物 —— 共享print(Dog.count)# 2 —— 类属性二、访问机制和优先级2.1 实例属性覆盖类属性classPerson:# 类属性默认值species人类planet地球def__init__(self,name):self.namename# 实例属性pPerson(张三)# 访问species——实例没有查找类属性print(p.species)# 人类 —— 从类属性来的print(Person.species)# 人类# 给实例添加同名属性——会覆盖类属性p.species火星人# ⚠️ 这是给p创建了实例属性print(p.species)# 火星人 —— 实例属性print(Person.species)# 人类 —— 类属性没有变化# 删除实例属性——类属性重新可见delp.speciesprint(p.species)# 人类 —— 又回到类属性了2.2 通过实例修改类属性的陷阱classCounter:count0# 类属性c1Counter()c2Counter()# ✅ 通过类修改——影响所有实例Counter.count100print(c1.count,c2.count)# 100 100# ⚠️ 通过实例修改——实际是创建了实例属性c1.count999# 不是修改类属性是在c1上创建了实例属性print(c1.count)# 999 —— 实例属性print(c2.count)# 100 —— 类属性没有被修改print(Counter.count)# 100 —— 类属性不变# 这就是最经典的陷阱# c1.count 999 看起来像是在修改类属性# 实际上是在c1上创建了一个同名的实例属性# 类属性 Counter.count 完全没有变化# 验证c1有实例属性c2没有print(c1.__dict__:,c1.__dict__)# {count: 999}print(c2.__dict__:,c2.__dict__)# {}2.3 可变类属性的共享陷阱# ⚠️ 类属性如果是可变对象——所有实例真的共享它classClassroom:students[]# 可变类属性——所有实例共享同一个列表def__init__(self,name):self.namenamedefadd_student(self,student_name):self.students.append(student_name)# 修改共享的列表room1Classroom(一班)room2Classroom(二班)room1.add_student(张三)room2.add_student(李四)# 两个教室共享了学生列表print(room1.students)# [张三, 李四]print(room2.students)# [张三, 李四] —— 一样的# ✅ 正确的做法在__init__中初始化classClassroomFixed:def__init__(self,name):self.namename self.students[]# 每个实例有自己的列表defadd_student(self,student_name):self.students.append(student_name)三、类属性的典型应用# 场景一类常量classMathConstants:PI3.141592653589793E2.718281828459045GOLDEN_RATIO1.618033988749895print(MathConstants.PI)# 不需要创建实例# 场景二实例计数器classUser:_total_users0# 类属性——追踪创建了多少用户def__init__(self,name):self.namename User._total_users1self._idUser._total_users# 当前用户的IDclassmethoddefget_total(cls):returncls._total_users u1User(张三)u2User(李四)u3User(王五)print(f共创建{User.get_total()}个用户)# 3# 场景三默认配置classDatabaseConfig:# 类属性作为默认配置hostlocalhostport5432databasemydbtimeout30classmethoddefoverride(cls,**kwargs):批量覆盖默认配置forkey,valueinkwargs.items():setattr(cls,key,value)DatabaseConfig.override(host192.168.1.100,port5433)print(DatabaseConfig.host)# 192.168.1.100四、总结区分类属性和实例属性是Python OOP的基本功。记住那条简单的规则在__init__中通过self.xxx定义的是实例属性在类体中直接定义的是类属性。核心要点实例属性类属性定义位置__init__中self.xxx类体中直接定义存储位置实例.__dict__类.__dict__作用范围每个实例独有所有实例共享修改方式实例.xxx value类名.xxx value⚠️关键陷阱实例.类属性名 值会创建实例属性遮蔽类属性——而不会修改类属性

相关新闻

2026/8/9 16:58:33

5分钟掌握Windows文件同步神器:SyncTrayzor完全使用指南

5分钟掌握Windows文件同步神器:SyncTrayzor完全使用指南 【免费下载链接】SyncTrayzor Windows tray utility / filesystem watcher / launcher for Syncthing 项目地址: https://gitcode.com/gh_mirrors/sy/SyncTrayzor SyncTrayzor是Windows平台上最强大的…

2026/8/9 16:58:33

U8接口API开发方式

已开发好的底层接口 接口文档https://docs.apipost.net/docs/6a39c41cc0ca000?localezh-cn OPENAPI 第三方系统部署在外网(互联网)与 U8 对接的场景。 限制:做不了上下游关联生单,比如采购入库单无法关联采购到货单&#xff1…

2026/8/9 18:13:37

计算机技术与科学毕设新颖的项目选题答疑

1 引言 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际应用需求&#xf…

2026/8/9 18:13:37

技术领袖创业风向解读与新兴技术评估实战指南

在技术领域,创业与创新是永恒的主题。当一位像谷歌首席科学家杰夫迪恩(Jeff Dean)这样的行业巨擘选择离开巨头公司,投身新的创业项目时,这不仅是个人职业的转折点,更可能预示着技术栈、开发范式乃至整个行业…

2026/8/9 18:13:37

网络安全毕设最全开题指导

0 选题推荐 - 人工智能篇 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际…

2026/8/9 18:13:37

5大核心技术解析:揭秘BiliDownloader的高效下载实现原理

5大核心技术解析:揭秘BiliDownloader的高效下载实现原理 【免费下载链接】BiliDownloader BiliDownloader是一款界面精简,操作简单且高速下载的b站下载器 项目地址: https://gitcode.com/gh_mirrors/bi/BiliDownloader BiliDownloader作为一款基于…

2026/8/9 18:13:37

SpringBoot+Vue菜鸟驿站管理系统设计与实现

1. 项目背景与核心价值菜鸟驿站作为社区物流末端的重要节点,每天需要处理数百件快递的入库、出库、暂存和通知业务。传统手工登记方式效率低下,错件率高达3%-5%,特别是在"双十一"等高峰期经常出现爆仓情况。这个毕业设计项目正是针…

2026/8/9 0:01:56

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:56

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/9 0:01:56

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:56

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/7 9:44:18

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/7 19:03:32

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/9 15:24:19

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…