Иногда это имеет смысл к связанным с кластером данным вместе. Я склонен делать так с dict, например,
self.group = dict(a=1, b=2, c=3)
print self.group['a']
Один из моих коллег предпочитает создавать класс
class groupClass(object):
def __init__(a, b, c):
self.a = a
self.b = b
self.c = c
self.group = groupClass(1, 2, 3)
print self.group.a
Обратите внимание, что мы не определяем методов класса.
Мне нравится использовать dict, потому что мне нравится минимизировать количество строк кода. Мой коллега думает, что код более читаем, если Вы используете класс, и он помогает добавить методы к классу в будущем.
Который Вы предпочитаете и почему?
Если вы действительно никогда не определяете какие-либо методы класса, на мой взгляд, dict или namedtuple имеют гораздо больший смысл. Простой + встроенный - это хорошо! К каждому его собственное, хотя.
Я не согласен с тем, что код более читается при использовании класса без методов. Обычно от класса ожидают функциональности, а не только данных.
Итак, я бы использовал dict до тех пор, пока не возникнет потребность в функциональности, а затем конструктор класса мог бы получить dict: -)
Ваш способ лучше. Не пытайтесь слишком сильно предвидеть будущее, так как вряд ли у вас это получится.
Однако, иногда имеет смысл использовать что-то вроде C struct, например, если вы хотите определить различные типы, а не использовать dicts для всего.
Я предпочитаю следовать YAGNI и использовать диктант.
Диктант, очевидно, подходит для этой ситуации. Он был разработан специально для этого варианта использования. Если вы на самом деле не собираетесь использовать класс как класс, нет смысла изобретать колесо и нести дополнительные накладные расходы / тратить впустую пространство класса, который действует как плохой словарь (нет функций словаря).
В языке, который его поддерживает, я бы использовал структуру struct
. Словарь был бы наиболее близок к структуре в Python, по крайней мере, насколько я это вижу.
Не говоря уже о том, что вы все равно можете добавить метод в словарь, если действительно захотите;)