Короткий ответ: все это покрывается PEP 557. Немного не в порядке с вашими вопросами ...
Почему?
- Чтобы использовать PEP 526, чтобы обеспечить простой способ определения таких классов.
- Для поддержки средств проверки статического типа.
Как выбрать, когда их использовать?
PEP совершенно ясно понимает, что они не являются заменой, и ожидают, что другие решения займут свое место.
Поэтому, как и в случае любого другого дизайнерского решения, вам необходимо точно решить, какие функции вам нужны. Если это включает в себя следующее, вам определенно не нужны классы данных.
Где нецелесообразно использовать классы данных?
Требуется совместимость API с кортежами или dicts. Требуется проверка типа сверх того, что предусмотрено PEP 484 и 526, либо требуется проверка значения или преобразование.
Тем не менее, то же самое верно и для SimpleNameSpace, так что еще мы можем посмотреть, чтобы решить? Давайте подробнее рассмотрим дополнительные функции, предоставляемые классами данных ...
Существующее определение SimpleNameSpace выглядит следующим образом:
Подкласс простого объекта, который обеспечивает доступ по атрибутам к своему пространству имен, а также осмысленное воспроизведение.
Затем в документации python говорится, что он обеспечивает простую реализацию __init__
, __repr__
и __eq__
. Сравнивая это с PEP 557, классы данных также предоставляют вам возможности для:
- упорядочение - сравнение класса, как если бы это был кортеж его полей, по порядку.
- неизменность - когда присвоение полей вызовет исключение
- контроль хеширования - хотя это не рекомендуется.
Очевидно, что вам следует использовать классы данных, если вы заботитесь о порядке или неизменности (или вам нужен элемент управления хешированием ниши).
Другие варианты использования?
Я ничего не вижу, хотя вы могли бы возразить, что начальное "почему?" охватывает другие варианты использования.
person
Peter Brittain
schedule
29.06.2018
__repr__
. dataclass добавляет гораздо больше, например__eq__
,__hash__
, .. - person L3viathan   schedule 28.06.2018