Если у вас есть группы связанных констант, например regex flags
, то Enum
является подходящим инструментом (например, ваши hi
и hello
в Set2
).
Для несвязанных констант я бы использовал класс Constant
из aenum
1 :
class MiscellaneousConstants(Constant):
A = 1
B = 2
Constant
s похожи на Enum
s в что вы не можете повторно связать их, и у них есть хорошие репрезенты:
>>> 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
) .