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)

输出为:

经验分享 程序员 微信小程序 职场和发展