python 类属性和实例属性
2015-05-29 17:30
567 查看
本文转载
原作者:worldisimple
原链接:/article/7160202.html
python的类属性和实例属性
今天一同事说踩了python的坑, 这确实是个“坑”
但是我觉得python之所以这样设计,就是明确要求写代码的人知道自己在写什么^ ^
python的实例属性必须在__init__(self) 方法中定义,直接跟在类名后边定义的属性都默认是类属性(类似于c++的static变量)。
而python实例又可以灵活的随便增加属性,便出现了图片中看似诡异的现象。
---------------------------------
我们来看一下他的原代码:
你觉得输出会是什么?
结果是 model_path 分别是 "xx_model" 和 "oo_model"
而model_dict全都是第二次调用的结果,也就是oo_model生成的dict的值(注意,他前边有一句self.model_dict.clear() )
原因是什么呢? "坑" 就在 他是用self.xxxx 这种方式引用变量,而不是self.__class__.xxxx
(1) self.model_path=path; #这对self.model_path进行了赋值,python中的第一次赋值视为变量的定义!
(2) self.xxxx这种格式的第一次赋值含义是什么呢?-->含义是:定义,也就是说定义了一个名为xxxx的实例属性。
(3) 因此m1,m2的两次调用,分别定义了对应的(不同的)self.model_path属性。
而self.model_dict,从头到尾都是 引用 它,从未进行过 赋值(重定义),所以引用的都是 类属性
原作者:worldisimple
原链接:/article/7160202.html
python的类属性和实例属性
今天一同事说踩了python的坑, 这确实是个“坑”
但是我觉得python之所以这样设计,就是明确要求写代码的人知道自己在写什么^ ^
python的实例属性必须在__init__(self) 方法中定义,直接跟在类名后边定义的属性都默认是类属性(类似于c++的static变量)。
而python实例又可以灵活的随便增加属性,便出现了图片中看似诡异的现象。
---------------------------------
我们来看一下他的原代码:
你觉得输出会是什么?
结果是 model_path 分别是 "xx_model" 和 "oo_model"
而model_dict全都是第二次调用的结果,也就是oo_model生成的dict的值(注意,他前边有一句self.model_dict.clear() )
原因是什么呢? "坑" 就在 他是用self.xxxx 这种方式引用变量,而不是self.__class__.xxxx
(1) self.model_path=path; #这对self.model_path进行了赋值,python中的第一次赋值视为变量的定义!
(2) self.xxxx这种格式的第一次赋值含义是什么呢?-->含义是:定义,也就是说定义了一个名为xxxx的实例属性。
(3) 因此m1,m2的两次调用,分别定义了对应的(不同的)self.model_path属性。
而self.model_dict,从头到尾都是 引用 它,从未进行过 赋值(重定义),所以引用的都是 类属性
相关文章推荐
- python 之 使用web.py实现一个简单的增删改查应用
- Python核心编程第八章笔记及习题记录
- python 点滴记录8:文件操作read、readline与readlines
- 一个简单的判断远端服务器端口是否通的Python脚本
- Python实现控制台输入密码的方法
- python删除过期文件的方法
- Python自定义函数的创建、调用和函数的参数详解
- 【转】一张图学会python编程
- Python中函数的参数定义和可变参数
- Python进阶With语法
- Python的Django框架中TEMPLATES项的设置教程
- python的moudles文件中__all__作用
- 用 Python 和 OpenCV 检测图片上的条形码
- OSError: [Errno 2] No such file or directory
- python类库26[读写Excel]
- Python安装scikit-learn包
- python数据类型详解
- Unable to locate package python-pip
- Scikit Source Code Reading(2015.05.29)
- Gleanings of Python