python中的类和c++中的类是一样的,不同之处就是c++的类,如果含有成员变量,并且成员变量发生变化后,会被类的对象(实例)或者是子类的对象继承到,但是python中如果类的实例之前已经对其自身的属性,即实例属性操作过,那之后不管类的属性是否发生变化,都与它无关,并且值不会继承过来。至于实例,是类通过一些方法构造出来的。下面贴上一个例子,例子是来自于:http://onlypython.group.iteye.com/group/wiki/1357-to-talk-about-the-types-of-properties-in-python-and-examples-of-the-types-of-attributes-the-difference
#coding: utf-8
classAAA():
aaa= 10
#情形1
obj1 =AAA()
obj2=AAA()printobj1.aaa, obj2.aaa, AAA.aaa#情形2
obj1.aaa += 2
printobj1.aaa, obj2.aaa, AAA.aaa#情形3
AAA.aaa += 3
print obj1.aaa, obj2.aaa, AAA.aaa
View Code
情形一,很清楚,通过类生成的实例,去访问类的属性,由于没有发生变化,所以他们三者的值是一样的。
情形二,obj1.aaa+=2,obj1的aaa是从它所在的类AAA中得来的,但是它只是从那边把值继承过来进行的+的操作,并没有影响到类AAA中的aaa属性,而obj2的aaa并没有发生变化,所以也不会变。
情形三,AAA.aaa对其属性aaa执行了操作,就像上文中说到的“如果类的实例之前已经对其自身的属性,即实例属性操作过,那之后不管类的属性是否发生变化,都与它无关,并且值不会继承过来”。这里也就是这个意思。
python中对象的属性,可以通过__dict__来查看。所以可以在上述代码中加入几行,print 实例/类.__dict__来查看实例及其类的属性列表,python中一切都被称为对象,所以当然不管是实例还是类我们都称为是对象,这个概念跟c++很不一样。