Сообщить об ошибке.

Функция replace() модуля dataclasses в Python

Создает новый класс данных того же типа, что и экземпляр

Синтаксис:

import dataclasses

dataclasses.replace(instance, /, **changes)

Параметры:

  • instance - экземпляра класса данных,
  • **changes - поля с изменениями.

Возвращаемое значение:

  • новый класс данных того же типа.

Описание:

Функция replace() модуля dataclasses создает новый объект того же типа экземпляра instance, заменяя поля значениями из аргумента **changes.

  • Если экземпляр не является классом данных, то вызывается исключение TypeError.
  • Если значения в **changes не указывают поля, то вызывается исключение TypeError.

Вновь возвращенный объект создается путем вызова метода класса данных __init__(). Это гарантирует вызов метода __post_init__(), если он присутствует.

Если существуют переменные только для инициализации, без значений по умолчанию, то при вызове dataclasses.replace() они должны быть указаны, чтобы их можно было передать в __init__() и __post_init__().

Если аргумент **changes содержит поля, имеющие вызов field(init=False), это будет ошибкой. В этом случае будет вызываться исключение ValueError.

Предупреждение о том, как работают поля с init=False во время вызова replace(). Они не копируются из исходного объекта, а скорее инициализируются в __post_init__(), если они вообще инициализированы. Ожидается, что поля с init=False будут редко и разумно использоваться. Если они используются, то было бы разумно иметь альтернативные конструкторы классов или, возможно, собственный метод MyType.replace() или аналогично названный, который обрабатывает копирование экземпляров.

Что такое "переменные только для инициализации" и метод __post_init__() смотрите в описании модуля dataclasses.