浅谈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中的数据存储模块shelve的用法
Mar 03 Python
举例讲解Python中的list列表数据结构用法
Mar 12 Python
利用Python开发实现简单的记事本
Nov 15 Python
Python简单实现控制电脑的方法
Jan 22 Python
windows下python和pip安装教程
May 25 Python
python学习开发mock接口
Apr 28 Python
关于Python形参打包与解包小技巧分享
Aug 24 Python
python 监测内存和cpu的使用率实例
Nov 28 Python
Python的PIL库中getpixel方法的使用
Apr 09 Python
Python如何读取、写入JSON数据
Jul 28 Python
如何在windows下安装配置python工具Ulipad
Oct 27 Python
Python 读取千万级数据自动写入 MySQL 数据库
Jun 28 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/11/23 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
js中Function引用类型常见有用的方法和属性详解
2019/12/11 Javascript
jQuery实现可编辑的表格
2019/12/11 jQuery
vue离开当前页面触发的函数代码
2020/09/01 Javascript
[02:36]DOTA2混沌骑士 英雄基础教程
2013/11/26 DOTA
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
Python生成随机密码的方法
2017/06/16 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
Python面向对象之继承代码详解
2018/01/29 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
python制作图片缩略图
2019/04/30 Python
python plotly绘制直方图实例详解
2019/07/22 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
Python assert关键字原理及实例解析
2019/12/13 Python
值传递还是引用传递
2015/02/08 面试题
2015年敬老月活动总结
2015/03/27 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
《搭石》教学反思
2016/02/18 职场文书
《葡萄沟》教学反思
2016/02/23 职场文书
用Python将GIF动图分解成多张静态图片
2021/06/11 Python
Golang并发操作中常见的读写锁详析
2021/08/30 Golang
Python实现视频中添加音频工具详解
2021/12/06 Python