tl; dr什麼是Pythonic(Py 3)指定大量定義的位掩碼和常量的方式?使用Enum(s)或只是有一個const的負載作爲類變量?和優點/缺點?移植C定義了Pythonic方式
背景
我移植的C代碼到Python 3.在C代碼有大量的定義被用作位掩碼:
#define ERR_1 = 0x8
#define ERR_2 = 0x2
#define ERR_4 = 0x100
...
我想在Python Pythonic的方式有這些將通過使用Enum
,我碰到IntEnum
這意味着我不必使用.value
無處不在,就像我會用正常Enum
:
from enum import IntEnum
class Errors(IntEnum):
BROKEN = 0x8
FUBARED = 0x4
GIVEUP = 0x7
print(0xFF & Errors.BROKEN)
但它仍然比只有print(0xFF & ERR_1)
更詳細,如果我將它們全部作爲常量使用,我可以得到它。
如果你不想讓它們變得冗長,你可以將它們命名爲'e1','e2'和'e4'(用C代碼)並將它們用作'Errors.e2'。無論如何,我認爲枚舉是要走的路,而且總是很好(特別是如果你打算增長/維護軟件的話)。 –