Каков наилучший способ инициализации и использования констант в классах Python? - PullRequest
31 голосов
/ 14 июня 2011

Вот как я объявляю константы и использую их в разных классах 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+ из этих констант в любой данный файл.

Ответы [ 4 ]

47 голосов
/ 14 июня 2011

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

import constants

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

Из Python Zen:

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

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

Пространства имен - одна из замечательных идей - давайте сделаем еще больше!

На этот раз я фактически скопировал ее из источника: PEP 20 -Дзен Питона

7 голосов
/ 14 июня 2011

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

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

   def __init__(self...

и уходи.

2 голосов
/ 14 июня 2011

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

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

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

  • import constants; some_func(constants.AWFUL)
  • from constants import *; some_func(AWFUL)
1 голос
/ 14 июня 2011

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

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

Создать константы с помощью модуля «настройки»?

Можно ли запретить изменение объекта в Python?

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