浅谈python 中类属性共享的问题


Posted in Python onJuly 02, 2019

感觉这种理解有问题,举个例子来说。

class Dog(object): 
 
  name = 'dog' 
 
  def init(self): 
 
    self.age = 18
 
d1 = Dog()
 
d2 = Dog()

这里有两个实例 d1,d2 吧。

d1.name # 输出 dogd2.name # 输出 dogd1.name = 'abc'
d1.name # 输出 abcd2.name # 输出 dogDog.name # 输出 dog

原因是 d1.name 输出 dog 不是因为这个实例共享了类属性,而是因为这个实例没有 dog 属性,所以 python 查找了类属性。但是一旦你修改了 d1.name 相当于给 d1 实例绑定了 name 属性之后,d1.name 就与类属性无关了。既然这样就谈不上实例之间共享类属性了,因为只要一赋值,就相当于绑定了属性,则上述 d1.name 的含义和 d2.name 的含义就不同了,它们的值也不同,很明显它们的数据没有共享。

但是要修改类属性,应该用

Dog.name = 'new name'

而不应该是

dog1.name = 'new name'

因为实例属性同名而覆盖类属性,的确是一个很容易忽视、出错的地方。

>>> class Dog():
...  name = "dog"
... 
>>> d1 = Dog()
>>> d1.name
'dog'
>>> d2 = Dog()
>>> d2.name
'dog'
>>> Dog.name
'dog'
>>> Dog.name = "a"
>>> d.name
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
NameError: name 'd' is not defined
>>> d1.name
'a'
>>> d2.name
'a'
>>>

以上这篇浅谈python 中类属性共享的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用正则表达式提取网页URL的方法
May 26 Python
Python将多个excel表格合并为一个表格
Feb 22 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
Python定时器线程池原理详解
Feb 26 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 Python
Django调用百度AI接口实现人脸注册登录代码实例
Apr 23 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
零基础小白多久能学会python
Jun 22 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 Python
python接口测试返回数据为字典取值方式
Feb 12 Python
如何通过Python实现标签云算法
Jul 02 #Python
对python特殊函数 __call__()的使用详解
Jul 02 #Python
对python 调用类属性的方法详解
Jul 02 #Python
python算法题 链表反转详解
Jul 02 #Python
python输入多行字符串的方法总结
Jul 02 #Python
Django高级编程之自定义Field实现多语言
Jul 02 #Python
python 杀死自身进程的实现方法
Jul 01 #Python
You might like
PHP 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
mailto的使用技巧分享
2012/12/21 Javascript
extjs render 用法介绍
2013/09/11 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
仿iframe效果Aajx文件上传实例
2016/11/18 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
零基础写python爬虫之神器正则表达式
2014/11/06 Python
python 上下文管理器使用方法小结
2017/10/10 Python
Django实现分页功能
2018/07/02 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
Python文件操作函数用法实例详解
2019/12/24 Python
Python sql注入 过滤字符串的非法字符实例
2020/04/03 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
Unix/Linux开发面试题
2016/08/16 面试题
中专生学习生活的自我评价分享
2013/10/27 职场文书
品质主管岗位职责
2014/03/16 职场文书
工作所在部门证明
2014/09/21 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
安全生产学习心得体会
2016/01/18 职场文书
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python
python+opencv实现目标跟踪过程
2022/06/21 Python