2011-09-23 76 views
4

我們假設當前代碼正在使用字符串作爲參數,並且您想記錄它們的有效值。如何在Python中編寫和使用枚舉類數據類型?

def MyFunc(region = None): 
    if region in ['A','B','C', None]: 
     # dosomething 
    else: 
     # complain about invalid parameter 

現在的問題是我怎麼能爲了解決兩個問題改進這一設計:

  • 能夠使用在IDE中的自動完成功能,自動 - 完成參數的可能值。

  • 文件有效值的參數列表(使用doxygen的當前代碼記錄)

+0

IDE自動完成是浪費時間。在那裏,我說了。更重要的是,請解釋爲什麼區域是一個字符串。列舉這樣的值有很多選擇。你爲什麼選擇一個字符串? –

回答

4

這裏有一個類似的問題: How can I represent an 'Enum' in Python?

這表明實施類似:

class MyClass : 
    A = 0 """The Letter A""" 
    B = 1 """The Letter B""" 
    C = 2 """The Letter C""" 
    D = 3 """The Letter D""" 

variable = MyClass.A # Ok 
variable = MyClass.E # Error 

有了這個,您可以獲得IDE自動完成。 (這與S.Lott的觀點相反,我一直都在使用......我猜測這是老習慣)。

使用文檔字符串來重現顯而易見的風格被認爲是糟糕的,我認爲在這種情況下會使代碼的可讀性變差。有關文檔字符串的更多信息:

http://www.python.org/dev/peps/pep-0257/

如果你很好奇爲什麼在Python中沒有枚舉類型,你可以檢查出PEP:

http://www.python.org/dev/peps/pep-0354/