Python: Наверху к использованию классов вместо словарей?

Переменное повторное использование.

я раньше делал это, все время полагая, что я сохранял несколько циклов на объявлении и понижал объем потребляемой памяти. Эти сбережения имели крохотную ценность по сравнению с тем, как непослушный это сделало код для отладки, особенно если я закончил тем, что переместил блок кода вокруг и предположения об измененных начальных значениях.

6
задан 17 August 2009 в 19:53
поделиться

5 ответов

Это очень вряд ли станет узким местом в вашем приложении, поэтому беспокоиться о производительности, вероятно, будет пустой тратой времени. Однако, если это узкое место или у вас просто немного свободного времени, попробуйте использовать namedtuple . Он сочетает в себе неизменность и малый объем памяти кортежа с красивым синтаксисом атрибутов класса.

10
ответ дан 8 December 2019 в 03:27
поделиться

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

4
ответ дан 8 December 2019 в 03:27
поделиться

Примерно похоже на вашу проблему: Возврат объекта против возврата кортежа

Нет четкого выбора. Словари быстрые, красивые и чистые. В конце концов, экземпляры классов - это особый словарь. Если вы хотите предоставить способ добавления функций и изменения интерфейса позже, класс будет лучшим выбором, но чрезмерный дизайн чего-то простого всегда плохой выбор. Python - это не java, где все должно быть экземпляром правильно созданного класса. Я тоже попадаю в этот грех.

1
ответ дан 8 December 2019 в 03:27
поделиться

Если вы работаете с объектами, я бы не стал хранить данные в базе данных просто по причинам, которые вы указали. Было бы значительно хуже, если бы вы изменили язык или что-то подобное.

FWIW, я бы начал со словаря. Если что-то усложняется или требуются новые функции, сделайте это объектом.

1
ответ дан 8 December 2019 в 03:27
поделиться

Несколько мыслей:

  1. Если вы начнете со словаря, вы всегда можете позже переключиться на настраиваемый класс, реализующий протокол сопоставления (или подклассы dict). Так что это, вероятно, хорошая отправная точка.

  2. Вы можете определить пользовательские объекты Python для использования __ slots __ , что будет быстрее и эффективнее с точки зрения памяти, если у вас большое количество объектов.

  3. Если вы используете пользовательский объект Python, его будет легче заменить в будущем объектом, написанным на C. (Я никогда не пробовал, но я ожидал, что создание подкласса dict от C будет сложной задачей.)

8
ответ дан 8 December 2019 в 03:27
поделиться
Другие вопросы по тегам:

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