浅谈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实现模拟按键,自动翻页看u17漫画
Mar 17 Python
python Django模板的使用方法
Jan 14 Python
在centos7中分布式部署pyspider
May 03 Python
python中闭包Closure函数作为返回值的方法示例
Dec 17 Python
如何使用VSCode愉快的写Python于调试配置步骤
Apr 06 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
Django时区详解
Jul 24 Python
python ctypes库2_指定参数类型和返回类型详解
Nov 19 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
Python3.8官网文档之类的基础语法阅读
Sep 04 Python
python3 字符串str和bytes相互转换
Mar 23 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操作Memcache实例介绍
2013/06/14 PHP
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
JS解析url查询参数的简单代码
2017/08/06 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
python中list循环语句用法实例
2014/11/10 Python
Python 实现简单的电话本功能
2015/08/09 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
使用python模拟命令行终端的示例
2019/08/13 Python
python定位xpath 节点位置的方法
2019/08/27 Python
django实现后台显示媒体文件
2020/04/07 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
人力资源行政经理自我评价
2013/10/23 职场文书
医药个人求职信范文
2014/01/29 职场文书
航空学院求职信
2014/06/11 职场文书
师德师风的心得体会
2014/09/02 职场文书
工程部岗位职责
2015/02/10 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
草房子读书笔记
2015/06/29 职场文书
实现GO语言对数组切片去重
2022/04/20 Golang