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)

輸出爲:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章