python的类属性和实例属性
2012-04-20 22:22
288 查看
![](http://images.cnblogs.com/cnblogs_com/worldisimple/class_field.jpg)
今天一同事说踩了python的坑, 这确实是个“坑”
但是我觉得python之所以这样设计,就是明确要求写代码的人知道自己在写什么^ ^
python的实例属性必须在__init__(self) 方法中定义,直接跟在类名后边定义的属性都默认是类属性(类似于c++的static变量)。
而python实例又可以灵活的随便增加属性,便出现了图片中看似诡异的现象。
---------------------------------
我们来看一下他的原代码:
![](http://images.cnblogs.com/cnblogs_com/worldisimple/yewen.jpg)
你觉得输出会是什么?
结果是 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——类属性/实例属性
- 第六种方式,python使用cached_property缓存装饰器和自定义cached_class_property装饰器,动态添加类属性(三),selnium webdriver类无限实例化控制成单浏览器。
- Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
- Python初始化实例属性
- python中类属性和类实例的属性的区别
- Python中的类属性、实例属性与类方法、静态方法
- 类属性和实例属性 Python从入门到放弃
- 【Python基础】Python面向对象 - 9 - 类属性,实例属性
- Python学习笔记——类属性和实例属性
- Python 类属性和实例属性
- python中类和实例如何绑定属性与方法示例详解
- 20.python对类的操作(一)——获取对象信息,实例属性和类属性。
- Python中property属性实例解析
- python面向对象编程(2)—— 实例属性,类属性,类方法,静态方法
- Python Class的实例属性/类属性
- Python面向对象—类属性和实例属性
- python:小心类实例的属性动态绑定机制
- python 详解类class的属性:类数据属性、实例数据属性、特殊的类属性、属性隐藏(二)
- Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
- 【Python】学习笔记——-7.5、实例属性和类属性