浅谈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异步回调机制实现和使用方法
Nov 26 Python
python通过floor函数舍弃小数位的方法
Mar 17 Python
浅谈python迭代器
Nov 08 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
pip安装时ReadTimeoutError的解决方法
Jun 12 Python
详解python中Numpy的属性与创建矩阵
Sep 10 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
python2与python3的print及字符串格式化小结
Nov 30 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 Python
Python标准库json模块和pickle模块使用详解
Mar 10 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 Python
教你怎么用python实现字符串转日期
May 24 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中的观察者模式
2010/03/24 PHP
PHP的可变变量名的使用方法分享
2012/02/05 PHP
PHP排序算法类实例
2015/06/17 PHP
三级下拉菜单的js实现代码
2011/05/23 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
python实现博客文章爬虫示例
2014/02/26 Python
Python中对列表排序实例
2015/01/04 Python
python爬虫使用cookie登录详解
2017/12/27 Python
Python从零开始创建区块链
2018/03/06 Python
django富文本编辑器的实现示例
2019/04/10 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
Tensorflow累加的实现案例
2020/02/05 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
医学院学生求职简历的自我评价
2013/10/24 职场文书
护士的岗位职责
2013/12/04 职场文书
党委书记个人检查对照材料思想汇报
2014/10/11 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python