【发布时间】:2015-11-19 13:43:50
【问题描述】:
tl;dr 指定大量已定义位掩码和常量的 Pythonic (Py 3) 方式是什么?使用 Enum(s) 还是仅使用大量 const 作为类变量?以及优缺点?
背景
我正在将 C 代码移植到 Python 3。在 C 代码中有大量用作位掩码的定义:
#define ERR_1 = 0x8
#define ERR_2 = 0x2
#define ERR_4 = 0x100
...
我认为在 Python 中使用 Enum 的 Pythonic 方式是使用 IntEnum,这意味着我不必像普通的 Enum 那样在任何地方都使用 .value :
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。无论如何,我认为枚举是要走的路,vervose 总是好的(特别是如果你计划发展/维护软件)。