Как лучше всего поддерживать набор констант в проекте Python? - PullRequest
1 голос
/ 29 мая 2020

У вас есть файл .py с приведенным ниже содержимым?

class Set1(Enum):
   A = 1
   B = 2

class Set2(Enum):
  hi=1
  hello=2

ИЛИ просто

Set1 = {"A":1,"B":2}
Set2 = {"C"="hi","D"="Hello"}

Обратите внимание, что эти константы будут использоваться различными модулями в проекте.

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Обычно вы определяете константы в файле следующим образом:

some_file.py:

FOO = 0
BAR = "baz"

И если вам нужно его использовать:

import some_file

print(some_file.FOO)
print(some_file.BAR)
0 голосов
/ 29 мая 2020

Если у вас есть группы связанных констант, например 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) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...