Если вы читаете эту статью, значит, либо вы ищете ответ на тот же вопрос, либо уже знаете его, но хотите быть в этом уверены.

Как бы то ни было, я уверен, что эта статья поможет развеять все ваши сомнения. Итак, давайте начнем

Классы в Python

Класс в Python ничем не отличается от класса в любом другом объектно-ориентированном языке. Класс — это логическая сущность/структура данных, созданная пользователем, которая обеспечивает способ совместной инкапсуляции данных и функций.

Создание объекта позволяет получить доступ к данным и функциям-членам класса.

Классы данных в Python

Класс данных — это обычный класс с декоратором @dataclass. Это новая функция, представленная в Python 3.7 и перенесенная в версию 3.6.

Любой, у кого есть Python 3.6 и выше, может использовать этот модуль.

Классы данных упрощают нашу жизнь, автоматически добавляя в наш класс специальные методы, такие как __init__(), __repr__() и т. д.

Давайте обсудим некоторые моменты, чтобы подробно выделить разницу между классами и классами данных:

1. Обычный класс создается с использованием ключевого слова class перед именем класса. В обычный класс нужно добавить функции dunder, такие как __init__() и __repr__().

Класс данных создается путем импорта класса данных из классов данных и добавления декоратора «@dataclass» над обычным классом.

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

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

3. Сравнение равенства в классе может потребовать много работы, потому что нам нужно определить функции сравнения, такие как __lt__(), __le__(), __ge__() и т. д., тогда как в классах данных декоратор @dataclass позаботится о функциях сравнения от нашего имени.

4. Dataclass предоставляет возможность инициализировать переменные вне __init__() с помощью встроенной функции __post_init__()

Исходя из вышеизложенного, мы можем сделать вывод, что DataClasses — явный победитель.