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
.