У меня есть небольшая программа на Python, состоящая из очень немногих модулей (около 4 или около того).Основной модуль создает список кортежей, тем самым представляя ряд записей.Эти кортежи доступны другим модулям через простую функцию, которая их возвращает (скажем, get_records()
).
Однако я не уверен, что это хороший дизайн.Проблема в том, что другие модули должны знать индексы каждого элемента в кортеже.Это увеличивает связь между модулями и не очень прозрачно для тех, кто хочет использовать основной модуль.
Я могу подумать о нескольких альтернативах:
Сделать значения индекса элементов кортежа доступными как константы модуля (например, IDX_RECORD_TITLE
, IDX_RECORD_STARTDATE
и т. Д.).Это исключает необходимость использования магических чисел, таких как title = record[3]
.
Не используйте кортежи, но создайте класс записи и верните список этих объектов класса.Преимущество заключается в том, что методы класса будут иметь самоочевидные имена, такие как record.get_title()
.
Не используйте кортежи, а словари.Таким образом, в этом случае функция будет возвращать список словарей.Преимущество заключается в том, что словарные ключи также говорят сами за себя (хотя кто-то, использующий модуль, должен был бы их знать).Но это похоже на огромные издержки.
Я считаю, что кортежи являются одной из сильных сторон Python (очень легко передавать составные данные без затрат на кодирование классов / объектов),поэтому я в настоящее время использую (1), но все еще задаюсь вопросом, что будет лучшим подходом.