浅谈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对小数进行除法运算的正确方法示例
Aug 25 Python
浅析Python中的for 循环
Jun 09 Python
Python实现的排列组合计算操作示例
Oct 13 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
使用Python的toolz库开始函数式编程的方法
Nov 15 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
浅析pandas 数据结构中的DataFrame
Oct 12 Python
python要安装在哪个盘
Jun 15 Python
Python监听剪切板实现方法代码实例
Nov 11 Python
python爬虫快速响应服务器的做法
Nov 24 Python
Python中的面向接口编程示例详解
Jan 17 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中的(伪)多线程与多进程
2013/07/01 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
python实现网页链接提取的方法分享
2014/02/25 Python
python搭建微信公众平台
2016/02/09 Python
Python之re操作方法(详解)
2017/06/14 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
python将音频进行变速的操作方法
2020/04/08 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
中学教师实习自我鉴定
2013/09/28 职场文书
给面试官的感谢信
2014/02/01 职场文书
暑期社会实践感言
2014/02/25 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
法人代表授权委托书
2014/04/08 职场文书
司机岗位职责
2015/02/04 职场文书
幼师求职自荐信
2015/03/26 职场文书
工厂采购员岗位职责
2015/04/07 职场文书
驳回起诉民事裁定书
2015/05/19 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers