Python 3.7+dataclassesфункция
dataclasses.replace()
копирование
Создаёт новый экземпляр датакласса на основе существующего, заменяя указанные поля.
Синтаксис
dataclasses.replace(obj, **changes)
replace() заново вызывает __init__ вместе с __post_init__, а не копирует объект побайтно: поля, объявленные с init=False, передать в него нельзя, и их значения не переносятся, а вычисляются заново. Копия поверхностная — вложенные списки и словари остаются общими с исходным объектом. Для frozen-датаклассов это штатный способ «изменить» поле, поэтому такие классы обычно и не нуждаются в сеттерах.
Примеры
from dataclasses import dataclass, replace
@dataclass
class Point:
x: int; y: int
p = Point(1, 2)
p2 = replace(p, x=10)
p2 # → Point(x=10, y=2)
p # → Point(x=1, y=2)
replace(p, x=0, y=0) # → Point(x=0, y=0)
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности