Классы данных и типизация. Основные варианты использования NamedTuplePython

Программы на Python
Ответить
Anonymous
 Классы данных и типизация. Основные варианты использования NamedTuple

Сообщение Anonymous »

Короче

PEP-557 представил классы данных в стандартной библиотеке Python, которые по сути могут выполнять ту же роль, что и Collections.namedtuple и типизация. NamedTuple. И теперь мне интересно, как разделить случаи использования, в которых NamedTuple по-прежнему является лучшим решением.

Преимущества классов данных перед NamedTuple
Конечно, вся заслуга принадлежит классу данных, если нам нужны:
  • изменяемые объекты
    поддержка наследования
  • Код: Выделить всё

    property
    декораторы, управляемые атрибуты
  • сгенерированные определения методов из коробки или настраиваемые определения методов
Преимущества классов данных кратко описаны в том же PEP: почему бы просто не использовать Nametuple.

Вопрос: В каких случаях Nametuple все же является лучшим выбором?

А как насчет противоположного вопроса для Nametuples: почему бы просто не использовать класс данных?
Я думаю, что Nametuple лучше с точки зрения производительности, но пока не нашел подтверждения этому.

Пример

Давайте рассмотрим следующую ситуацию:

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

Подход NamedTuple:

Код: Выделить всё

from typing import NamedTuple

PageDimensions = NamedTuple("PageDimensions", [('width', int), ('height', int)])
Подход DataClass:

Код: Выделить всё

from dataclasses import dataclass

@dataclass
class PageDimensions:
width: int
height: int
Какое решение предпочтительнее и почему?

P.S. этот вопрос ни в коем случае не является дубликатом этого, потому что здесь я спрашиваю о случаях, в которых Nametuple лучше, а не о разнице (я я проверил документацию и источники, прежде чем спрашивать)

Подробнее здесь: https://stackoverflow.com/questions/516 ... -use-cases
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»