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)
輸出爲: