2012-05-01 196 views
1

可能重複:
Instance variables vs. class variables in PythonPython ...靜態變量?

的是這兩種情況之間的差異,它是如何使用Python處理?

練習1

class MyClass: 
    anArray = {} 

練習2

class MyClass: 
    __init__(self): 
      self.anArray = {} 

這似乎是在第一實施例的陣列被視爲一個靜態變量。 Python如何處理這個問題,這是什麼原因?

+0

這不是一個「靜態變量」,但它是*具體對象*的成員,它有一個「穩定的名稱」。這可能是哪個對象? ;-)(請記住,類不是Python中的「只是定義」)。 – 2012-05-01 04:06:53

+0

它們被稱爲類變量。 http://stackoverflow.com/questions/2714573/instance-variables-vs-class-variables-in-python或http://stackoverflow.com/questions/68645/static-class-variables-in-python – birryree

回答

5

在第一個示例中,anArray(在Python中稱爲字典,不是數組)是類屬性。它可以使用MyClass.anArray訪問。一旦定義了類,它就會存在。

在第二個示例中,anArray是一個實例屬性。它可以使用MyClass().anArray訪問。 (但是請注意,這樣做只是拋棄了MyClass實例;更明智的示例是mc = MyClass(); mc.anArray['a'] = 5。)直到創建類的實例纔會存在。

0

它被宣佈爲不同區域。Ex1類似於全局或靜態變量。

obj = MyClass() 
obj2 = MyClass() 
print "IS one instance ", id(obj.anArray) == id(obj2.anArray) 

Ex2是本地屬性。

obj = MyClass() 
obj2 = MyClass() 
print "IS one instance ", id(obj.anArray) == id(obj2.anArray) 
+1

我認爲類屬性和實例屬性是更合適的術語。 – jdi

+0

林不知道你試圖用這些代碼顯示什麼,因爲它們完全相同。 – Joost