Pyright:在数据类中使用默认值对`InitVar`进行类型检查

时间:2019-07-19 19:55:21

标签: python typechecking python-dataclasses pyright

在我的python项目中,我正在尝试使用pyright执行类型检查。当使用init变量定义数据类时,我无法弄清楚如何正确告知我的意图。

我希望能够有选择地向构造函数提供一个变量,并提供一个默认值。但是,asdictfields之类的数据类函数不应考虑此变量。

我想出的最好方法基本上是这样的:

@dataclass
class SomeClass:
    i: int
    j: InitVar[int] = 1

    def __post_init__(self, j):
        self.i = j

虽然代码的行为与预期的相同,但是pyright抱怨int类型的值不应分配给InitVar[int]类型的字段。

以前,我已经为dataclass包添加了类型存根(我正在使用python 3.6的反向端口),其中InitVar被描述为:

class InitVar(Generic[_T]): ...

从定义上看,pyright认为该字段应该是类InitVar的一个实例,并且根据我从数据类的文档中收集的内容,对字段的类型进行了内部检查诱导所需的行为。因此这也很有意义,即字段类型不应为int,以使数据类机制正确识别该字段。

有没有办法告诉吡露特上述分配是正确的(或者可能不正确?)。还是可以更改InitVar的类型库?

更新

万一有人偶然发现,这似乎与如何实现数据类的细节有关,并且正在努力解决这一问题。

https://github.com/microsoft/pyright/issues/174

0 个答案:

没有答案