Подтвердить что ты не робот

Каков наилучший способ инициализации и использования консистентов в классах Python?

Вот как я объявляю константы и использую их в разных классах Python:

# project/constants.py
GOOD = 1
BAD = 2
AWFUL = 3

# project/question.py
from constants import AWFUL, BAD, GOOD

class Question:
    def __init__(self):
        ...

Является ли это хорошим способом хранения и использования значений констант? Я понимаю, что через некоторое время файл констант может стать довольно большим, и я могу явно импортировать 10+ из этих констант в любой файл.

4b9b3361

Ответ 1

почему бы просто не использовать

import constants

def use_my_constants():
    print constants.GOOD, constants.BAD, constants.AWFUL

Из python zen:

Пространства имен хороши. Давайте сделаем еще больше!

РЕДАКТИРОВАТЬ: Кроме того, когда вы цитируете, вы должны включить ссылку и проверить ее, потому что, как указывали другие, она должна читать:

Пространства имен - одна хорошая идея - позвольте сделать больше из них!

На этот раз я на самом деле скопировал его из источника: PEP 20 - Zen of Python

Ответ 2

У вас также есть опция, если константы привязаны к определенному классу и используются конфиденциально в этом классе, чтобы сделать их специфичными для этого класса:

class Foo(object):
   GOOD = 0
   BAD = 1
   WTF = -1

   def __init__(self...

и уходите.

Ответ 3

Попробуйте просмотреть следующие ссылки (одна ссылка содержит квитанцию ​​от активного состояния о том, как реализовать реальные константы):

Импорт длинного списка констант в файл Python

Создать константы, используя "настройки" модуль?

Могу ли я предотвратить изменение объекта в Python?

Ответ 4

У вас есть несколько вариантов:

  • Сделайте это так, как вы делаете прямо сейчас с файлом констант
  • Используйте плоский файл и проанализируйте его один раз, передайте словарь/класс вокруг
  • Запрос в базу данных

С верхней точки зрения 1 и 2 примерно одинаковы. Что касается вашего вопроса об импорте конкретных констант, гораздо проще использовать одну из следующих конвенций:

  • import constants; some_func(constants.AWFUL)
  • from constants import *; some_func(AWFUL)