Я разрабатываю в python класс файлов, который может читать и записывать файл, содержащий список координат xyz. В моей программе у меня уже есть класс Coord3D для хранения координат xyz.
Мой вопрос относительно дизайна метода getCoordinate (index). Должен ли я возвращать кортеж поплавков или объект Coord3D?
В первом случае я получаю очень низкую связь, но тогда мне, вероятно, придется создавать экземпляр объекта Coord3D с полученными значениями, хотя и вне класса файла. Во втором случае у меня будет класс файлов, тесно связанный с классом Coord3D.
Обратите внимание, что я думаю, что между этими двумя решениями нет большой разницы, но я хотел бы прочитать ваш ответ и причину этого.
Изменить: чтобы напомнить ответы, которые я получил до сих пор, похоже, что нет четкого выбора. Было сказано (надлежащим образом), что python - это не Java, и вам не нужен специализированный класс для всего, потому что он вам нужен по языковой архитектуре. В моем случае, однако, у меня есть следующие условия:
- Я работаю над библиотекой, где объект Coord3D используется как есть. Использование этого повысит согласованность моей библиотеки, поскольку типы данных будут одинаково использоваться.
- Объект Coord3D имеет состояние и поведение. Действительно, объект Coord3D объединяет координаты и единицы в едином объекте. Операции между объектами Coord3D будут учитывать потенциально разные единицы и действовать соответственно.
- Я могу поместить централизованный код управления в экземпляр класса Code3D, чтобы отказаться, например, от массивов длины 4 или не единиц. Если я использую кортеж, я не могу выполнить эту проверку. Более того, если метод принимает команду Coord3D, это гарантировано, что он хорошо сформирован заранее (вы можете быть жирным и проверить наличие isinstance или проверить интерфейс). Кортеж может содержать недопустимые данные. Хотя подход python к обработке ошибок выполняется там, где возникает проблема, класс, препятствующий мне иметь координату xyz, сделанную из трех строк, как-то полезен (исправьте меня, если не так, пожалуйста)
С другой стороны, использование кортежа имеет следующие преимущества:
- Меньшее занятие ресурсами, весьма критичное в случае огромных
- Упрощенная конструкция. Больше классов означает более сложный дизайн. Кортеж - это стандартный тип данных, который хорошо понимается и может быть легко распакован. Индивидуальный класс не является.
- Используя кортеж, класс XYZFile полностью отделен от остальной библиотеки (поскольку он не использует объект Coord3D). Это означает, что он может быть повторно использован полностью как независимый объект.
дальнейшие комментарии очень приветствуются!