python的类属性和实例属性

>>> class counter:
...     count = 0                     1
...     def __init__(self):
...         self.__class__.count += 1 2
...     
>>> counter
<class __main__.counter at 010EAECC>
>>> counter.count                     3
0
>>> c = counter()
>>> c.count                           4
1
>>> counter.count
1
>>> d = counter()                     5
>>> d.count
2
>>> c.count
2
>>> counter.count
2

这里面并没有对c.count进行修改 所以c.count和counter.count的id其实是一样的,所以这个说明他们指向的都是同一个对象,但是一旦对类实例进行赋值,比如c.count=2 这里面2其实是整数对象,写全了其实是c.count=new int(2) 这样的赋值(赋对象)将实例和类属性脱离,之前没有赋值前,count其实是类属性,实例只是调用了他,但是一旦进行赋值,或者说c.count+=2这样的赋值也会将实例和类属性进行脱离,这样c.count再怎么改变都不会影响到counter.count的值

 

下面的这个例子会再次说明这个问题

未命名2

远空(376754792) 10:20:24

 

[深圳]冒泡(691515082) 10:20:34

如果你改变了引用,那等于是改变时拷贝

远空(376754792) 10:21:03

未命名1

[深圳]冒泡(691515082) 10:21:24

未命名

远空(376754792) 10:22:31

好像跑题了、、

[深圳]冒泡(691515082) 10:22:42

class自己的属性只是在实例没有定义的时候可以被实例引用,实例如果改变这个引用,不影响类的属性

 

 

append不会改变类实例的引用指向,但是赋值比如a.a=3会改变,将实例属性和类属性分离

posted @ 2013-03-14 20:23  no13bus  阅读(256)  评论(0编辑  收藏  举报