浅谈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设置windows桌面壁纸的实现代码
Jan 28 Python
Python中暂存上传图片的方法
Feb 18 Python
机器学习python实战之手写数字识别
Nov 01 Python
解决Python requests库编码 socks5代理的问题
May 07 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 Python
python实现多进程按序号批量修改文件名的方法示例
Dec 30 Python
Python脚本打包成可执行文件过程解析
Oct 20 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
Jun 11 Python
Python利用zhdate模块实现农历日期处理
Mar 31 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
留言板翻页的实现详解
2006/10/09 PHP
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
js点击选择文本的方法
2015/02/09 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
windows下安装python paramiko模块的代码
2013/02/10 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
python 数据类型强制转换的总结
2021/01/25 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
台湾家适得:Homeget
2019/02/11 全球购物
C语言编程练习
2012/04/02 面试题
会计助理的岗位职责
2013/11/29 职场文书
校园安全检查制度
2014/02/03 职场文书
小组合作学习反思
2014/02/18 职场文书
搞笑车尾标语
2014/06/23 职场文书
早读课迟到检讨书
2014/09/25 职场文书
护士自荐信范文
2015/03/25 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL