浅谈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创建xml的方法
Mar 10 Python
使用Python3 编写简单信用卡管理程序
Dec 21 Python
Python语言描述最大连续子序列和
Dec 05 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
Jan 29 Python
pandas数据集的端到端处理
Feb 18 Python
python+pyqt5编写md5生成器
Mar 18 Python
Python restful框架接口开发实现
Apr 13 Python
详解Pandas 处理缺失值指令大全
Jul 30 Python
python爬虫基础之urllib的使用
Dec 31 Python
python之django路由和视图案例教程
Jul 26 Python
Selenium浏览器自动化如何上传文件
Apr 06 Python
全网非常详细的pytest配置文件
Jul 15 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调用C代码的实现方法
2014/03/11 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
在laravel中使用Symfony的Crawler组件分析HTML
2017/06/19 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
Python多线程应用于自动化测试操作示例
2018/12/06 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
房产销售经理职责
2013/12/20 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
护士岗位竞聘书
2015/09/15 职场文书
篮球拉拉队口号
2015/12/25 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis