在類中直接聲明的屬性稱爲類屬性。 和你的例子一樣(儘管縮進和一些語法是錯誤的),value1,value2和value3是類gaurab的類屬性。
在其他屬性中聲明的屬性是實例屬性,並綁定到聲明它們的類屬性。 像value1和value2變量綁定到init在類的東西。
將類屬性與在靜態類型語言中發現的靜態變量(如C++,JAVA等)進行比較。 類屬性由類的所有實例共享,因此只有這樣的屬性的一個副本被創建(例如,類的實例擁有自己的實例變量副本)。
當生成something
類的實例時,會執行something
的__init__
方法,並在其參數self
中接收新實例。此方法創建兩個實例屬性:value1
和value2
。然後這個實例被分配到實例變量中,所以它被綁定到具有這兩個實例屬性的事物上。
例如:
class foo:
def __init__(self):
self.Alist=[] #It is an instance attribute
Blist=[] #It is a class attribute
對於這個類定義,當我們創建作爲2類實例:
var1 = foo()
var2 = foo()
的Blist
屬性由兩個var1
和var2
但Alist
屬性共享爲不同兩個都。所以,如果我們操作如下:
var1.Alist.append(1)
var1.Blist.append(10)
var2.Alist.append(2)
var2.Blist.append(20)
的
print(var1.Alist)
print(var1.Blist)
print(var2.Alist)
print(var2.Blist)
輸出將是:
[1]
[10]
[2]
[10,20]
這是因爲Blist
變量同時受var1
和var2
所以共享,變化在var1.Blist
受影響var2.Blist
,反之亦然。 但是,var1.Alist
和var2.Alist
是彼此獨立的。因此,如果你想要一個屬性對於所有類的實例是共同的,那麼你將它聲明爲類屬性(如果不是常常需要的話),你可以聲明它爲實例屬性。
您的縮進是錯誤的!你也想看看這裏:http://stackoverflow.com/questions/8959097/what-is-the-difference-between-class-and-instance-variables-in-python – elena