Pyright: проверка типов `InitVar` со значением по умолчанию в классе данных
В моем проекте на Python я пытаюсь выполнить проверку типа с помощью Pyright. При определении класса данных с помощью переменной init я не могу понять, как правильно сообщить Pyright мои намерения.
Я хочу иметь возможность дополнительно предоставить переменную для конструктора и предоставить значение по умолчанию. Однако эта переменная не должна рассматриваться функциями класса данных, такими как asdict
или же fields
,
Лучший способ, которым я мог придумать, по сути выглядит так:
@dataclass
class SomeClass:
i: int
j: InitVar[int] = 1
def __post_init__(self, j):
self.i = j
Хотя код ведет себя так, как задумано, Pyright жалуется, что значение типа int
не следует присваивать полю типа InitVar[int]
,
Ранее я включил заглушки типов для пакета dataclass (я использую backport для python 3.6), где InitVar описывается так:
class InitVar(Generic[_T]): ...
Глядя на определение, кажется, имеет смысл, что Pyright считает, что поле должно быть экземпляром класса InitVar
и из того, что я мог бы извлечь из документации классов данных, тип полей внутренне проверяется, чтобы вызвать желаемое поведение. Таким образом, также имеет смысл, что тип поля не должен быть int
для механизма класса данных, чтобы правильно распознать поле.
Есть ли способ сказать Pyright, что приведенное выше назначение является правильным (или это может быть неправильно?). Или может типестуб для InitVar
быть изменены?
Обновить
В случае, если кто-то наткнется на это, это, похоже, связано со спецификой реализации класса данных, и над ним работает правая сторона.