在我的python项目中,我正在尝试使用pyright执行类型检查。当使用init变量定义数据类时,我无法弄清楚如何正确告知我的意图。
我希望能够有选择地向构造函数提供一个变量,并提供一个默认值。但是,asdict
或fields
之类的数据类函数不应考虑此变量。
我想出的最好方法基本上是这样的:
@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
的类型库?
万一有人偶然发现,这似乎与如何实现数据类的细节有关,并且正在努力解决这一问题。