python 中类属性共享问题
感觉这种理解有问题,举个例子来说。
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 中类属性共享问题相关推荐
- 关于Python类属性与实例属性的讨论
标题名字有点长. 之所以想写这个文章是因为碰巧看到网上一篇关于Pyhon中类属性及实例属性区别的帖子.因为我之前也被这个问题困扰过,今天碰巧看到了这篇帖子,发现帖子的作者只是描述了现象,然后对原因的解 ...
- Python类属性和实例属性分别是什么?
实例属性即同一个类的不同实例,其值是互不关联的,也不会互相影响的,定义时使用"self.属性名",调用时也使用"self.属性名". 类属性则是同一个类的所有实 ...
- python中类中属性和方法的具体定义方法和使用
1. Python中类中特性分成属性和方法 属性和方法都分为私有和公有的,私有的只可以在本类中使用外部是无法访问的 2. 定义属性(成员变量)的语法格式(公有属性/私有属性) class 类名: de ...
- 混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解
混淆概念详细解析:Python中类.对象.方法.函数和属性的区别和理解 前言 一.类.对象.方法.函数和属性的区别和理解 二.一个类的简单案例和对各种概念的理解 三.总结 欢迎学习交流! 邮箱: z- ...
- 学习笔记之——Python中类和对象的理解
学习笔记之--Python中类和对象的理解 面向对象的含义和特性 类 Python中类的定义.结构.创建 Python类的定义 Python类的结构 类的创建 类的属性 类的方法 对象 对象的创建 参 ...
- python中类变量和实例变量详解
python中类变量和实例变量详解 在了解类变量和实例变量之前,首先要知道类变量和实例变量的定义. 类变量:可在类的所有实例之间共享的值,就是指不是单独分配给每个实例,实例可以调用类变量. 实例变量: ...
- Python中类的定义与使用
Python中类的定义与使用 Part I 目标: 1.类的定义 2.父类,子类定义,以及子类调用父类 3.类的组合使用 4.内置功能 1.类的定义 #!/usr/bin/env python #co ...
- python100例详解-几个小例子给你讲解Python中类的描述符
原标题:几个小例子给你讲解Python中类的描述符 学习 Python 这么久了,说起 Python 的优雅之处,能让我脱口而出的, Deor(描述符)特性可以排得上号. 描述符是Python 语言独 ...
- python 中类与对象
python中类.属性.方法用现实中的一个例子来解释,例如汽车类,方法:能跑,属性:白色的.加长的.python中的属性就是在python中定义的成员变量,方法就是在python中定义的函数. pyt ...
最新文章
- 【算法笔记】哈密顿问题
- 知名美国服务器租用商介绍
- Qt QInputDialog文本输入对话框示例
- android app固定dp,Android屏幕适配—被偷走的dp
- 【线性代数】——投影矩阵
- linux如何正确关机,重启
- Flutter插件shared_preferences数据存储的使用
- Lambda-Stream应用
- 标准差np.std()
- Android蓝牙4.0之传输速率的提升
- Firebase报错:Installations Service is unavailable. Please try again later.
- java 对word加密_Word文档中怎样给文件信息加密?大神都这样操作,你还不知道?...
- HDU-1111解题报告
- Unity3d挂载脚本时报错“Can't add script behaviour TMP_CoroutineTween. ...”
- JavaScript中的数值转换函数
- 在mm32f3270上为MicroPython启用Timer模块
- 我与数据仓库那些事-数据模型
- C语言数据类型和存储
- pragma comment的使用(转)
- DDT — Python 数据驱动工具:
热门文章
- Cell重磅发布15万人体微生物基因组!超大规模宏基因组研究揭示数千计人体微生物新物种...
- 有了这个科研思路,高水平SCI就在手边!
- linux shell编程时报:bad substitution错误的解决办法
- Python使用matplotlib可视化散点图、并在可视化图像的底部和右边添加边缘直方图、自定义边缘直方图的色彩(Marginal Histogram)
- R语言编写自定义函数基于ggsumarystats函数计算每个分组的统计值、自定义可视化分组分面条形图,并在X轴标签下方添加分组对应的统计值(样本数N、中位数median、四分位数的间距iqr)
- R语言层次聚类模型示例
- python 多种图片数据格式互转
- numpy 矩阵转置
- tensorflow 的输入层和输出层维度注意事项
- 怎样从tensorflow的generator object Estimator.predict at 0x7fb1ecefeaf0中取数据