2013-03-13 130 views
0

這裏是我的代碼不能正常工作蟒蛇靜態變量

class MyClass: 
    special_items = {} 
    def preload_items(self): 
     special_items['id'] = "properties" 

NameError:全局名稱 'special_items' 沒有定義

作品

class MyClass: 
    special_items = {} 
    def preload_items(self): 
     MyClass.special_items['id'] = "properties" 

是不是special_items一個靜態成員我可以訪問這個類中的任何地方?

回答

2

python中沒有靜態成員。你定義的是一個班級成員。該成員存儲在類對象中,並且如您所示,它被作爲MyClass.special_items訪問。

看來你正在試圖做的是初始化special_items.爲此,classmethod是比較合適的(有一個爲self沒有用):

@classmethod 
def preload_items(cls): 
     cls.special_items['id'] = "properties" 

請注意,您也可以訪問它self.special_items,但它仍然存儲在類對象中,即該類的所有對象都訪問相同的值。

+0

也許建議這樣一個類的方法......(或者注意''self.special_items ['id']'也適用於這個簡單的例子) – mgilson 2013-03-13 18:39:25

+0

所以我必須在這個special_items之前附加一些東西?沒有一個乾淨的方式來在Python中調用這個變量? – wwli 2013-03-13 18:41:39

+1

爲什麼你認爲它不乾淨?你可以定義一個全局變量,但是如果該變量與MyClass在邏輯上相關聯,那麼類成員就會更好。 – shx2 2013-03-13 18:42:42