如果您有一组相关的常量,例如regex flags,那么Enum 是合适的工具(例如Set2 中的hi 和hello)。
对于不相关的常量,我将使用 aenum1 中的 Constant 类:
class MiscellaneousConstants(Constant):
A = 1
B = 2
Constants 与Enums 相似之处在于您无法重新绑定它们,并且它们具有很好的代表:
>>> MiscellaneousConstants.A
<MiscellaneousConstants.A: 1>
>>> MiscellaneousConstants.A = 9
Traceback (most recent call last):
...
AttributeError: cannot rebind constant <MiscellaneousConstants.A>
键入类名可能很麻烦,因此为了方便将Constant 成员放入全局名称空间,提供了export:
from aenum import Constant, export
@export(globals())
class MiscellaneousConstants(Constant):
A = 1
B = 2
并在使用中:
>>> A
<MiscellaneousConstants.A: 1>
请注意,与 Python 一样,全局级别的名称仍然可以反弹:
>>> A = 9
>>> A
9
Constant 类成员仍然是常量:
>>> MiscellaneousConstants.A
<MiscellaneousConstants.A: 1>
>>> MiscellaneousConstants.A = 9
Traceback (most recent call last):
...
AttributeError: cannot rebind constant <MiscellaneousConstants.A>
1 披露:我是Python stdlib Enum、enum34 backport 和Advanced Enumeration (aenum) 库的作者。