浅谈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分析网页上所有超链接的方法
May 08 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
Oct 13 Python
Python 中开发pattern的string模板(template) 实例详解
Apr 01 Python
Python时间的精准正则匹配方法分析
Aug 17 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
Apr 08 Python
Python基于递归算法求最小公倍数和最大公约数示例
Jul 27 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
Sep 24 Python
Python 实现使用空值进行赋值 None
Mar 12 Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
Jun 30 Python
Python ellipsis 的用法详解
Nov 20 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批量生成缩略图的代码
2008/07/19 PHP
FleaPHP的安全设置方法
2008/09/15 PHP
计算php页面运行时间的函数介绍
2013/07/01 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
python如何查看安装了的模块
2020/06/23 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
大学生职业生涯规划书范文
2014/01/04 职场文书
大学学习生活感言
2014/01/18 职场文书
新闻学专业个人求职信写作
2014/02/04 职场文书
鲜花方阵解说词
2014/02/13 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
社区戒毒工作方案
2014/06/04 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
大国崛起英国观后感
2015/06/02 职场文书
委托收款证明
2015/06/23 职场文书
深入浅析Django MTV模式
2021/09/04 Python