浅谈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 相关文章推荐
利用Fn.py库在Python中进行函数式编程
Apr 22 Python
python下调用pytesseract识别某网站验证码的实现方法
Jun 06 Python
深入理解Python3中的http.client模块
Mar 29 Python
使用pandas read_table读取csv文件的方法
Jul 04 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
Jan 09 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
Jul 05 Python
sqlalchemy实现时间列自动更新教程
Sep 02 Python
django使用channels实现通信的示例
Oct 19 Python
Python Pandas知识点之缺失值处理详解
May 11 Python
python状态机transitions库详解
Jun 02 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
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
bootstrap Table的一些小操作
2017/11/01 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
Pytorch之保存读取模型实例
2019/12/30 Python
python 命名规范知识点汇总
2020/02/14 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
建筑实习自我鉴定
2013/10/18 职场文书
失业者真诚求职信范文
2013/12/25 职场文书
关于工资低的辞职信
2014/01/14 职场文书
挖掘机司机岗位职责
2014/02/12 职场文书
体育课课后反思
2014/04/24 职场文书
法人委托书范本
2014/09/15 职场文书
党员查摆剖析材料
2014/10/10 职场文书
幼师辞职信怎么写
2015/02/27 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
Python实现视频自动打码的示例代码
2022/04/08 Python