浅谈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 BeautifulSoup使用方法详解
Nov 21 Python
python用字典统计单词或汉字词个数示例
Apr 22 Python
在Python编程过程中用单元测试法调试代码的介绍
Apr 02 Python
在Python的Django框架中获取单个对象数据的简单方法
Jul 17 Python
Python_LDA实现方法详解
Oct 25 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
python实现nao机器人身体躯干和腿部动作操作
Apr 29 Python
Python及Pycharm安装方法图文教程
Aug 05 Python
python实现tail实时查看服务器日志示例
Dec 24 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
python怎么提高计算速度
Jun 11 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中创建并处理图象
2006/10/09 PHP
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
PHP数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
js html实现计算器功能
2018/11/13 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
vue prop传值类型检验方式
2020/07/30 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
python中lambda函数 list comprehension 和 zip函数使用指南
2014/09/28 Python
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
python异常触发及自定义异常类解析
2019/08/06 Python
Python any()函数的使用方法
2019/10/28 Python
Python关于反射的实例代码分享
2020/02/20 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
大专生自荐信
2013/10/04 职场文书
人事主管岗位职责范本
2013/12/04 职场文书
关于爱情的广播稿
2014/01/16 职场文书
销售职业生涯规划范文
2014/03/14 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
社区国庆节活动总结
2015/03/23 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
导游词之嵊泗列岛
2019/10/30 职场文书