浅谈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装饰器的函数式编程详解
Feb 27 Python
python让图片按照exif信息里的创建时间进行排序的方法
Mar 16 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
python用pandas数据加载、存储与文件格式的实例
Dec 07 Python
详解基于python-django框架的支付宝支付案例
Sep 23 Python
Python 3.8正式发布重要新功能一览
Oct 17 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
Python连接Mysql进行增删改查的示例代码
Aug 03 Python
python中如何打包用户自定义模块
Sep 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中的按位与和按位或操作示例
2014/01/27 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
PHP Session机制简介及用法
2014/08/19 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
网页中的图片的处理方法与代码
2009/11/26 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
微信小程序开发探究
2016/12/27 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
十个Python程序员易犯的错误
2015/12/15 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
Python实现二维曲线拟合的方法
2018/12/29 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
关于numpy数组轴的使用详解
2019/12/05 Python
django框架中间件原理与用法详解
2019/12/10 Python
python实现程序重启和系统重启方式
2020/04/16 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
自我鉴定模板
2013/10/29 职场文书
应届毕业生应聘自荐信
2013/12/07 职场文书
销售人才自我评价范文
2014/09/27 职场文书
出差报告格式模板
2014/11/06 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技