感觉这种理解有问题,举个例子来说。

class Dog(object): name = 'dog' def init(self): self.age = 18d1 = 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 中类属性共享问题相关推荐

  1. 关于Python类属性与实例属性的讨论

    标题名字有点长. 之所以想写这个文章是因为碰巧看到网上一篇关于Pyhon中类属性及实例属性区别的帖子.因为我之前也被这个问题困扰过,今天碰巧看到了这篇帖子,发现帖子的作者只是描述了现象,然后对原因的解 ...

  2. Python类属性和实例属性分别是什么?

    实例属性即同一个类的不同实例,其值是互不关联的,也不会互相影响的,定义时使用"self.属性名",调用时也使用"self.属性名". 类属性则是同一个类的所有实 ...

  3. python中类中属性和方法的具体定义方法和使用

    1. Python中类中特性分成属性和方法 属性和方法都分为私有和公有的,私有的只可以在本类中使用外部是无法访问的 2. 定义属性(成员变量)的语法格式(公有属性/私有属性) class 类名: de ...

  4. 混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解

    混淆概念详细解析:Python中类.对象.方法.函数和属性的区别和理解 前言 一.类.对象.方法.函数和属性的区别和理解 二.一个类的简单案例和对各种概念的理解 三.总结 欢迎学习交流! 邮箱: z- ...

  5. 学习笔记之——Python中类和对象的理解

    学习笔记之--Python中类和对象的理解 面向对象的含义和特性 类 Python中类的定义.结构.创建 Python类的定义 Python类的结构 类的创建 类的属性 类的方法 对象 对象的创建 参 ...

  6. python中类变量和实例变量详解

    python中类变量和实例变量详解 在了解类变量和实例变量之前,首先要知道类变量和实例变量的定义. 类变量:可在类的所有实例之间共享的值,就是指不是单独分配给每个实例,实例可以调用类变量. 实例变量: ...

  7. Python中类的定义与使用

    Python中类的定义与使用 Part I 目标: 1.类的定义 2.父类,子类定义,以及子类调用父类 3.类的组合使用 4.内置功能 1.类的定义 #!/usr/bin/env python #co ...

  8. python100例详解-几个小例子给你讲解Python中类的描述符

    原标题:几个小例子给你讲解Python中类的描述符 学习 Python 这么久了,说起 Python 的优雅之处,能让我脱口而出的, Deor(描述符)特性可以排得上号. 描述符是Python 语言独 ...

  9. python 中类与对象

    python中类.属性.方法用现实中的一个例子来解释,例如汽车类,方法:能跑,属性:白色的.加长的.python中的属性就是在python中定义的成员变量,方法就是在python中定义的函数. pyt ...

最新文章

  1. 【算法笔记】哈密顿问题
  2. 知名美国服务器租用商介绍
  3. Qt QInputDialog文本输入对话框示例
  4. android app固定dp,Android屏幕适配—被偷走的dp
  5. 【线性代数】——投影矩阵
  6. linux如何正确关机,重启
  7. Flutter插件shared_preferences数据存储的使用
  8. Lambda-Stream应用
  9. 标准差np.std()
  10. Android蓝牙4.0之传输速率的提升
  11. Firebase报错:Installations Service is unavailable. Please try again later.
  12. java 对word加密_Word文档中怎样给文件信息加密?大神都这样操作,你还不知道?...
  13. HDU-1111解题报告
  14. Unity3d挂载脚本时报错“Can't add script behaviour TMP_CoroutineTween. ...”
  15. JavaScript中的数值转换函数
  16. 在mm32f3270上为MicroPython启用Timer模块
  17. 我与数据仓库那些事-数据模型
  18. C语言数据类型和存储
  19. pragma comment的使用(转)
  20. DDT — Python 数据驱动工具:

热门文章

  1. Cell重磅发布15万人体微生物基因组!超大规模宏基因组研究揭示数千计人体微生物新物种...
  2. 有了这个科研思路,高水平SCI就在手边!
  3. linux shell编程时报:bad substitution错误的解决办法
  4. Python使用matplotlib可视化散点图、并在可视化图像的底部和右边添加边缘直方图、自定义边缘直方图的色彩(Marginal Histogram)
  5. R语言编写自定义函数基于ggsumarystats函数计算每个分组的统计值、自定义可视化分组分面条形图,并在X轴标签下方添加分组对应的统计值(样本数N、中位数median、四分位数的间距iqr)
  6. R语言层次聚类模型示例
  7. python 多种图片数据格式互转
  8. numpy 矩阵转置
  9. tensorflow 的输入层和输出层维度注意事项
  10. 怎样从tensorflow的generator object Estimator.predict at 0x7fb1ecefeaf0中取数据