Это, в основном, вопрос «хорошего стиля питона».Константы группировки в python
У меня есть модуль, который использует несколько констант, которые, по его мнению, должны быть сгруппированы.
Допустим, у нас есть Собаки и кошка, и у каждого из них есть количество ног и любимая еда.
Обратите внимание, что
- мы хотим, чтобы моделировать ничего, кроме этих констант о собаках и кошках
- вполне вероятно, мы будем иметь больше животных в будущем.
- Эти константы не будут использоваться за пределами текущего модуля.
Я думал о следующих решениях:
Константы на уровне модуля
DOG_NUMBER_OF_LEGS = 4
DOG_FAVOURITE_FOOD = ["Socks", "Meat"]
CAT_NUMBER_OF_LEGS = 4
CAT_FAVOURITE_FOOD = ["Lasagna", "Fish"]
Они, кажется, на самом деле не сгруппированы, но я думаю, что это решение, которое я предпочитаю.
Классы в пространствах имен
class Dog(object):
NUMBER_OF_LEGS = 4
DOG_FAVOURITE_FOOD = ["Socks", "Meat"]
class Cat(object):
NUMBER_OF_LEGS = 4
FAVOURITE_FOOD = ["Lasagna", "Fish"]
Мне не нравится это решение, как мы будем иметь класс, который мы не будем использовать, и они могут быть на самом деле инстанцированный.
словарь констант
ANIMALS_CONFIG = {
"DOG" : {
"NUMBER_OF_LEGS" : 4,
"FAVOURITE_FOOD" : ["Socks", "Meat"]
},
"CAT" : {
"NUMBER_OF_LEGS" : 4,
"FAVOURITE_FOOD" : ["Lasagna", "Fish"]
}
}
Я также думал о добавлении подмодулей, но я действительно не хочу, чтобы выставить эти внутренние константы
что является наиболее вещим способом сделайте это/как бы вы это сделали?
Вы также можете иметь класс 'Animal' с' 'dog' и cat' экземпляры этого класса. – syntonym
Или вы также можете использовать [named tuples] (https://docs.python.org/2.7/library/collections.html#collections.namedtuple). – syntonym
Как вы будете использовать их в своем коде? Вы будете повторять или выбирать? Откуда будет параметр выбора? –