Python Glossary English

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Сообщить о неточности