Используя класс Python как контейнер данных

Иногда это имеет смысл к связанным с кластером данным вместе. Я склонен делать так с 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, потому что мне нравится минимизировать количество строк кода. Мой коллега думает, что код более читаем, если Вы используете класс, и он помогает добавить методы к классу в будущем.

Который Вы предпочитаете и почему?

48
задан David Pärsson 9 September 2016 в 06:57
поделиться

6 ответов

Если вы действительно никогда не определяете какие-либо методы класса, на мой взгляд, dict или namedtuple имеют гораздо больший смысл. Простой + встроенный - это хорошо! К каждому его собственное, хотя.

45
ответ дан 26 November 2019 в 18:39
поделиться

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

Итак, я бы использовал dict до тех пор, пока не возникнет потребность в функциональности, а затем конструктор класса мог бы получить dict: -)

2
ответ дан 26 November 2019 в 18:39
поделиться

Ваш способ лучше. Не пытайтесь слишком сильно предвидеть будущее, так как вряд ли у вас это получится.

Однако, иногда имеет смысл использовать что-то вроде C struct, например, если вы хотите определить различные типы, а не использовать dicts для всего.

5
ответ дан 26 November 2019 в 18:39
поделиться

Я предпочитаю следовать YAGNI и использовать диктант.

8
ответ дан 26 November 2019 в 18:39
поделиться

Диктант, очевидно, подходит для этой ситуации. Он был разработан специально для этого варианта использования. Если вы на самом деле не собираетесь использовать класс как класс, нет смысла изобретать колесо и нести дополнительные накладные расходы / тратить впустую пространство класса, который действует как плохой словарь (нет функций словаря).

1
ответ дан 26 November 2019 в 18:39
поделиться

В языке, который его поддерживает, я бы использовал структуру struct . Словарь был бы наиболее близок к структуре в Python, по крайней мере, насколько я это вижу.

Не говоря уже о том, что вы все равно можете добавить метод в словарь, если действительно захотите;)

1
ответ дан 26 November 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: