浅谈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中的变量及其命名和打印
Mar 11 Python
Python 字符串与数字输出方法
Jul 16 Python
值得收藏的10道python 面试题
Apr 15 Python
详解Python 切片语法
Jun 10 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
python实现将json多行数据传入到mysql中使用
Dec 31 Python
在主流系统之上安装Pygame的方法
May 20 Python
完美解决pycharm 不显示代码提示问题
Jun 02 Python
解决keras加入lambda层时shape的问题
Jun 11 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 Python
Python中的程序流程控制语句
Feb 24 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 水平的题目
2007/05/30 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
2016/09/18 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
js中less常用的方法小结
2017/08/09 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python条件和循环的使用方法
2013/11/01 Python
Swift中的协议(protocol)学习教程
2016/07/08 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
python实现智能语音天气预报
2019/12/02 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
python3 简单实现组合设计模式
2020/07/02 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
高分子材料与工程专业推荐信
2013/12/01 职场文书
高中生毕业自我鉴定范文
2013/12/22 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
2014入党积极分子批评与自我批评思想汇报
2014/09/20 职场文书
新党章的学习心得体会
2014/11/07 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers