Python Glossary English

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