Какие признаки указывают на то, что классы данных Python НЕ подходят для конкретного случая использования?Python

Программы на Python
Ответить
Anonymous
 Какие признаки указывают на то, что классы данных Python НЕ подходят для конкретного случая использования?

Сообщение Anonymous »

Я считаю, что классы данных Python невероятно удобны.
  • Они вырезают тонну шаблонного кода (больше не нужно писать self.foo = foo для каждого параметра __init__ и больше не нужно прописывать атрибут за атрибутом в методах расширенного сравнения)
  • Они исключают поддержку кода при добавлении нового атрибута в класс (автоматическое __eq__, __repr__ и т. д. автоматически включают новое поле)
  • Они упрощают проверку классов или их экземпляров (

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

    dataclasses.fields
    , dataclasses.asdict и т. д.)
  • Функциональность легко выбрать; если вам нужно что-то более конкретное, чем стандартный __eq__, просто напишите это самостоятельно, и декоратор @dataclasses.dataclass легко включит его.
Они настолько хороши, что я использую их повсюду для нового кода, смотрю на некоторые из моих старых существующих кодов и задаюсь вопросом, есть ли какая-то причина, по которой мне не следует рефакторить вместо этого любые "ручные" классы превращаются в классы данных.
Даже если класс не является "классом данных" (возможно, у него есть только один или два параметра __init__, например), настройка его как класса данных все еще означает, что мне не нужно вводить __init__ самому, шаблонный __init__ полностью исчезает вместо того, чтобы загромождать код, и я получите все остальные преимущества класса данных бесплатно. Итак... почему бы и нет?
Каковы тревожные сигналы, указывающие на то, что использование класса данных не является хорошей идеей? Существуют ли какие-либо распространенные варианты использования, на которые легко указать и сказать: «Если классу нужно будет выполнять XYZ, класс данных просто сделает это более сложным, а не менее»?

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

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

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

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

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

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

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