2017-05-17 43 views
1

好奇的是,如果別人之前做過這個。Python:如何使用枚舉值污染名稱空間

我想用枚舉值來污染我的命名空間。

例如在我的代碼中,我想引用RED,GREEN和BLUE而不是Color.RED,Color.GREEN和Color.BLUE。

直截了當的方法是,定義枚舉之後,把RED = Color.REDGREEN = Color.GreenBLUE = Color.BLUE ...但我想保持其乾燥(不要重複自己),這意味着,當我添加一個新的顏色到枚舉我不想明確將它添加到名稱空間。

將是很好,如果定義class Color(Enum):後,你可以from Color import *

我可以寫一個pollute_enum()功能,將猴子locals()或東西,但它會是該函數移動到工具包,因爲locals()有問題會提到其他的東西。我知道有些模塊可以在調用堆棧上行走,但現在變得非常黑客。

+2

出於好奇,到底爲什麼你會想這樣做? – Linuxios

回答

1

我不是一個提倡使用全局狀態的,但你可以創建一個名爲color_enums.py模塊,並把它寫:

RED = 0 
BLUE = 1 
GREEN = 2 

然後在你的代碼,你可以這樣做:

from color_enums import * 
if thing == GREEN: 
    # do something 
+0

他希望模塊中的RED變量是Color.RED而不是0。 – Billy

1

我不是很確定爲什麼你想這樣做,但是你可以在你的模塊中實時更新locals

注:不推薦

import enum 

class Color(enum.Enum): 
    RED = 1 
    GREEN = 2 
    BLUE = 3 

locals().update({color.name: color for color in Color}) 
+1

'locals()。update(Color .__ members __)'?還要注意OP已經提到過這樣的事情。此外,這不適用於函數內的導入。 –

相關問題