2014-02-28 56 views
-3

這是一個相關的問題:How do I check if a variable exists?如何檢查Python中是否存在靜態變量?

但是,它不適用於靜態變量。

我所要做的是以下,

class A: 
    def __init__(self): 
     if A.var is null: # this does not work, okay 
      A.var = 'foo' 
      print 'assigned' 

好吧,既然A.var甚至沒有分配。它會引發en錯誤。所以,我想這一點:

class A: 
    def __init__(self): 
     if 'A.var' not in globals(): # this seems to okay, but .. 
      A.var = 'foo' 
      print 'assigned' 

a = A() 
b = A() 

它的結果:

assigned 
assigned 

這都說明if 'A.var' not in globals():線不能正常工作。

那麼,如何檢查Python中是否存在靜態變量?

+2

Python沒有靜態變量,所以...你沒有。 – geoffspear

+0

在python中沒有這樣的靜態變量 - 一個類的變量簡單地稱爲類變量。沒有'空'(它被稱爲「無」)。另外,你正在尋找'hasattr'。 – l4mpi

+0

另外,如何在'__init__'函數調用之前分配一個類的屬性? – Dunno

回答

5

無論您使用hasattr

if not hasattr(A, 'var'): 
    A.var = 'foo' 

,或者如有些人會根據「易請求原諒比許可」的原則喜歡:

try: 
    A.var 
except NameError: 
    A.var = 'foo' 

最後,你可以簡單地定義班級機構中的默認值:

class A(object): 
    var = None 
    ... 

if A.var is None: 
    a.var = 'foo' 

(請注意, proach是線程安全的)

+0

'try ... except'方法非常簡單和容易我不明白爲什麼有人會尋找其他東西 – Dunno

+1

Upvoted for'hasattr',雖然我不同意喜歡try/except方法 - hasattr'更短,更可讀和更明確。 – l4mpi

+0

經過多一點思考後,我認爲EAFP的方法不僅僅是令人不快,而且在這種情況下是錯誤的。你沒有做任何需要許可的事情,因爲設置屬性總是可能的(因爲'A'對設置屬性當然沒有限制)。因此,您甚至必須使用無意義的語句,訪問屬性而不以任何方式使用它來測試「權限」。但實際上你只是想檢查條件是否滿足,條件是「屬性x已被設置」 - 直接轉換爲上面的if語句。 – l4mpi

相關問題