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

解析 Python 类里类变量的修改方式

在 Python 类中,类变量是属于类本身的变量,所有实例共享同一内存空间。修改类变量的方式主要有两种:通过类名修改和通过实例修改,但两者的效果截然不同,需要重点区分。

1. 通过类名修改类变量(推荐)

通过类名直接修改类变量,会真正改变类变量的值,所有实例访问该变量时都会获取到更新后的值。

示例:

python

运行

class MyClass: class_var = "初始值" # 类变量 # 通过类名修改类变量 MyClass.class_var = "修改后的值" # 所有实例访问的都是修改后的值 obj1 = MyClass() obj2 = MyClass() print(obj1.class_var) # 输出:修改后的值 print(obj2.class_var) # 输出:修改后的值 print(MyClass.class_var) # 输出:修改后的值

2. 通过实例修改类变量(不推荐,易混淆)

通过实例修改类变量时,不会改变类本身的变量,而是会给该实例创建一个同名的实例变量,此后该实例访问该变量时,会优先使用自己的实例变量(屏蔽类变量),而其他实例和类本身访问的仍然是原来的类变量。

示例:

python

运行

class MyClass: class_var = "初始值" # 类变量 obj1 = MyClass() obj2 = MyClass() # 通过实例 obj1 "修改" 类变量(实际是创建实例变量) obj1.class_var = "obj1的实例变量" # 实例 obj1 访问的是自己的实例变量 print(obj1.class_var) # 输出:obj1的实例变量 # 实例 obj2 和类本身访问的仍是原来的类变量 print(obj2.class_var) # 输出:初始值 print(MyClass.class_var) # 输出:初始值

总结

  • 通过类名修改:会全局更新类变量,影响所有实例。
  • 通过实例修改:不会改变类变量,只会给该实例新增一个同名实例变量,仅影响当前实例。

实际开发中,建议始终通过类名修改类变量,避免通过实例修改导致的逻辑混淆。

https://avg.163.com/topic/detail/8126074
https://avg.163.com/topic/detail/8126272
https://avg.163.com/topic/detail/8126470
https://avg.163.com/topic/detail/8125935
https://avg.163.com/topic/detail/8126065
https://avg.163.com/topic/detail/8126263
https://avg.163.com/topic/detail/8126400
https://avg.163.com/topic/detail/8126466
https://avg.163.com/topic/detail/8125933
https://avg.163.com/topic/detail/8126049
https://avg.163.com/topic/detail/8126269
https://avg.163.com/topic/detail/8126404
https://avg.163.com/topic/detail/8126469
https://avg.163.com/topic/detail/8125931
https://avg.163.com/topic/detail/8126061
https://avg.163.com/topic/detail/8126265
https://avg.163.com/topic/detail/8126401
https://avg.163.com/topic/detail/8126465
https://avg.163.com/topic/detail/8125932
https://avg.163.com/topic/detail/8126397
https://avg.163.com/topic/detail/8126462
https://avg.163.com/topic/detail/8126054
https://avg.163.com/topic/detail/8126398
https://avg.163.com/topic/detail/8126464
https://avg.163.com/topic/detail/8126052
https://avg.163.com/topic/detail/8126258
https://avg.163.com/topic/detail/8126396
https://avg.163.com/topic/detail/8126461
https://avg.163.com/topic/detail/8125930
https://avg.163.com/topic/detail/8126045
https://avg.163.com/topic/detail/8126267
https://avg.163.com/topic/detail/8126402
https://avg.163.com/topic/detail/8126467
https://avg.163.com/topic/detail/8126261
https://avg.163.com/topic/detail/8126399
https://avg.163.com/topic/detail/8126468
https://avg.163.com/topic/detail/8125934
https://avg.163.com/topic/detail/8126050
https://avg.163.com/topic/detail/8126268
https://avg.163.com/topic/detail/8126463

http://www.cnnetsun.cn/news/150569.html

相关文章:

  • FaceFusion如何避免头发边缘锯齿?抗锯齿设置技巧
  • Windows 11离线安装.NET Framework 3.5终极教程
  • Vector配置完全指南:从零搭建高性能数据管道的实用手册
  • FaceFusion能否处理带有鱼眼畸变的全景视频?
  • FaceFusion如何配置多GPU协同加速?
  • FaceFusion开源项目的贡献指南:如何参与开发?
  • FaceFusion如何避免“恐怖谷效应”?自然度优化策略
  • FaceFusion人脸融合效果对比:旧版 vs 新镜像版本
  • 10个惊艳的Flutter UI设计模板:让你的应用瞬间提升档次
  • FaceFusion如何处理带有边框或黑边的视频?
  • FaceFusion能否用于老照片修复?人脸增强效果实测
  • Open-AutoGLM和Mobile-Agent到底怎么选?视觉识别场景下的4种实战对比
  • FaceFusion支持疤痕修复联动:医学美学结合
  • FaceFusion能否处理量子噪声图像?前沿科学影像处理
  • 零配置网络发现神器:Avahi全面使用指南
  • 揭秘Open-AutoGLM与Mobile-Agent视觉识别核心差异:5大关键指标对比,结果令人震惊
  • FaceFusion如何与OBS集成实现直播换脸?
  • FaceFusion能否处理红外热成像人脸?特殊影像适配研究
  • FaceFusion与Hugging Face模型库的对接进展
  • Docassemble:法律文档自动化的终极解决方案
  • Kanata键盘定制工具全新升级:极速安装与智能映射体验
  • Gboard词库Magisk模块:让输入法秒变专业词典
  • McgsPro组态软件v3.2.3:5分钟快速上手工业自动化配置
  • FaceFusion能否实现人脸老化/逆龄化的精确控制?
  • 从零构建全栈智能厨房助手:KitchenOwl的架构演进与实践启示
  • React Native Animatable滑动删除动画架构重构指南
  • 【AI语言模型巅峰之战】:Open-AutoGLM与mobile-use真实场景精度实测报告
  • 5分钟掌握3D创作:Hunyuan3D-2mini重新定义轻量化AI建模新范式
  • StringTemplate 4:如何用可视化模板引擎解决复杂文本生成难题?
  • 44、OneDrive与打印功能全解析