python的类变量、实例变量和单个实例变量
python类的变量有类变量、实例变量和单个实例变量,“单个实例变量”是我的说法,更为规范的说法我还不能确切地知道。学习编程语言真是“一入编程深似海”,总是有那么多曲曲折折的坑,每一个坑都要花点时间去解决。那些编书的人,往往不知道读者到底哪儿不懂。一个细节可能就让读者琢磨半天。所以自己趁着是初学者,把自己遇到的坑,感觉到模糊的地方都先写下来。比如在使用类的时候,对于类变量和实例变量的区别就开始就不清楚。为什么还要有单个实例变量,也不明白。今天基本上搞明白了,但或许还有不对的地方。
1.类变量在所有实例当中高高在上,可以用类名进行操作,但不可以用实例进行操作。
2.实例变量要在init里定义。
3.单个实例变量在类外面定义,只针对单个实例有效,对其它实例无效。
还是看例子吧
#类变量、对象变量、具体实例变量的区分 class Animal(): "This is Animal species class." species="Animal"#类的静态变量,所有对象共享。 count=0 def __init__(self,name): self.name=name#z在init定义的是对象变量。 self.attri=[]#并以“self."打头为对象变量,所有对象共享。 Animal.count+=1#统计类的实例个数 def add_attributes(self,attri):#为attri赋值的方法 if(type(attri)==list): self.attri.extend(attri) else: self.attri.append(attri) cat=Animal("Tom") rat=Animal("Micky") dog=Animal("Pluto") li=["小型","哺乳动物","聪明"] cat.add_attributes(li) print(cat.attri) rat.add_attributes(li) rat.location="house"#专门对rat定义的变量,不能用于cat和dog等实例。 rat.shuyao="dishasi" ratStr=",".join(rat.attri)#列表转字符串 print("和老鼠相关的属性有:") print("包括:%s,"%ratStr+rat.location+","+rat.shuyao)#关于格式化的理解还需要提高 print("类的实例个数是:%s"%Animal.count)#利用类调用类变量 print("类的实例个数是:%s"%dog.count)#利用实例调用类变量,下面都是。 Animal.count+=1 print("类的实例个数是:%s"%cat.count) dog.count+=1#此句无法对类变量操作 print("类的实例个数是:%s"%rat.count)
输出为: