1. 程式人生 > >Python 的列舉型別 enum 實現

Python 的列舉型別 enum 實現

 C 語言中有個列舉型別 enum,很適合在定義一系列相關的常量時,由程式自動為常量分配 id,解決人工分配 id 可能導致的 id 衝突問題。在 Python 這種指令碼語言中,當定義大量相關的常量時,如果由程式設計師人工分配,要麼容易 id 衝突,要麼不好進行 id 分段管理。其實,可以很簡單地實現 Python 版的 enum(當然是沒有型別檢測的 enum 版本)。
 實現程式碼如下:

  1. def enum(module, str_enum, sep=None):  
  2.     """把用特定分隔符隔開的 str_enum 字串實現為 module 的列舉值. 
  3.     @param module 宿主物件, 可以是 module, class, ...
     
  4.     eg1: enum(test, "A B C") => test.A,test.B,test.C == 0,1,2 
  5.     eg2: enum(CTest, 'one=1,two,three,ten=0x0A,eleven', sep=',') => 
  6.         CTest.one,CTest.two,CTest.ten, CTest.eleven == 1,2,10,11 
  7.     """
  8.     idx = 0
  9.     for name in str_enum.split(sep):  
  10.         if'='in name:  
  11.             name,val = name.rsplit('='
    1)  
  12.             if val.isalnum():  
  13.                 idx = eval(val)  
  14.         setattr(module, name.strip(), idx)  
  15.         idx += 1