2010-08-17 113 views
12

所以我使用靜態類成員,這樣我就可以在類方法和同一類的靜態方法之間共享數據(只有一個類的實例化)。我理解這很好,但我只是想知道什麼時候靜態成員被初始化?它是否導入?關於班級的第一次使用?因爲我將從多於一個模塊(因此多於一個導入語句)調用此類的靜態成員。訪問靜態方法的所有模塊是否共享相同的靜態數據成員?如果我的主客戶端刪除了我的類的實例,然後重新創建它(沒有完全終止或重新導入東西),我的數據成員是否會被保留?靜態類成員python

回答

13

它們將在類定義時進行初始化,如果您將該類作爲模塊的一部分導入,將在導入時發生。假設這樣的「靜態」類成員定義樣式:

class Foo: 
    bar = 1 

print Foo.bar # prints '1' 

請注意,這是一個靜態類成員,因此不需要實例化類。

導入語句只會執行一次模塊的內容,無論執行多少次或執行的位置。

是的,靜態成員將由訪問它們的任何代碼共享。

是的,如果你刪除的對象,其類型一類的靜態成員將被保留,是類:

# Create static member 
class Foo: 
    bar = 1 

# Create and destroy object of type Foo 
foo = Foo() 
del foo 

# Check that static members survive 
print Foo.bar # Still prints '1' 
+1

是的,我知道我沒有實例化的類。但類實例需要訪問這些成員以及其他模塊。我擔心我從其他幾個模塊導入此模塊。這是否意味着靜態成員重置所有模塊?或者每個導入它的模塊都有自己的一組靜態成員? – Falmarri 2010-08-17 19:38:54

+0

你的編輯回答了我的問題,謝謝=] – Falmarri 2010-08-17 19:39:24