python的类属性和实例属性

>>> class counter:
...     count = 0                     ...     def __init__(self):
...         self.__class__.count += 1 ...     
>>> counter
<class __main__.counter at 010EAECC>
>>> counter.count                     
0
>>> c = counter()
>>> c.count                           
1
>>> counter.count
1
>>> d = counter()                     >>> 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会改变,将实例属性和类属性分离

转载于:https://www.cnblogs.com/no13bus/archive/2013/03/14/2960290.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值