Python 3.7+dataclassesпонятие
dataclasses.InitVar
поля
Псевдо-тип поля: значение передаётся в __init__/__post_init__, но НЕ становится атрибутом экземпляра.
Синтаксис
field: dataclasses.InitVar[T]
Это способ принять в конструктор данные, которые нужны только для вычисления настоящих полей и не должны оставаться в объекте: после __init__ такого атрибута у экземпляра просто нет. Отсюда типичный сюрприз — InitVar-поле не видно ни в repr, ни в сравнении, ни в fields(), ни в asdict(). И если забыть написать __post_init__, значение будет принято и молча выброшено; в __post_init__ такие параметры приходят позиционно, в порядке объявления в классе.
Примеры
import dataclasses
@dataclasses.dataclass
class C:
x: int
add: dataclasses.InitVar[int]
def __post_init__(self, add):
self.x += add
print(C(10, 5).x) # → 15
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности