浅谈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实现正则检测密码合法性
Jan 05 Python
Python 基础知识之字符串处理
Jan 06 Python
Python 迭代器与生成器实例详解
May 18 Python
python删除过期log文件操作实例解析
Jan 31 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
python 将md5转为16字节的方法
May 29 Python
Python实现的个人所得税计算器示例
Jun 01 Python
python 处理数字,把大于上限的数字置零实现方法
Jan 28 Python
关于Tensorflow分布式并行策略
Feb 03 Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
Sep 02 Python
python切割图片的示例
Nov 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接口并发测试的方法(推荐)
2016/12/15 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
分享15个最受欢迎的Python开源框架
2014/07/13 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
numpy中索引和切片详解
2017/12/15 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
Django restframework 源码分析之认证详解
2019/02/22 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
简单英文演讲稿
2014/01/01 职场文书
企业法人代表任命书
2014/06/06 职场文书
暑期培训班策划方案
2014/08/26 职场文书
敬老月活动总结
2014/08/28 职场文书
工作表现证明
2015/06/15 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
vue实现拖拽交换位置
2022/04/07 Vue.js