Если вы читаете эту статью, значит, либо вы ищете ответ на тот же вопрос, либо уже знаете его, но хотите быть в этом уверены.
Как бы то ни было, я уверен, что эта статья поможет развеять все ваши сомнения. Итак, давайте начнем
Классы в 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 — явный победитель.