我在我的代码中集成了mypy工具,但是在字面量的类型检查中有错误 错误:“Optional[Type[Temp]]”的项目“None”没有属性“pankaj”[union-attr]
它总是将 b 视为 Optional[Type[Temp]] 但当它为真时它不应该是 Optional 并且当它为 false 时它是 Optional。但是它给出了 Optional[Type[Temp]]
的真假错误 class Temp:
@staticmethod
def pankaj():
print("pankaj")
def accepts_only_int(x: int) -> Union[tuple[Literal[True],Type[Temp]],tuple[Literal[False],Optional[Type[Temp]]]]:
return (False,Temp)
a, b=accepts_only_int(6)
if a:
print(b.pankaj())
else:
print(a,b.pankaj())
mypy
无法跟踪多个变量的依赖关系,这是一个实现限制。要解决此问题,请不要解压accepts_only_int
——将其分配给一个变量a
并测试if a[0]
。那么你不是在引用几个变量,而是通过联合中的项目类型来缩小元组。您可以稍后在条件分支中解压:
from typing import Literal
class Temp:
@staticmethod
def pankaj() -> None:
print("pankaj")
def accepts_only_int(x: int) -> tuple[Literal[True], type[Temp]] | tuple[Literal[False], type[Temp] | None]:
return (False, Temp)
a = accepts_only_int(6)
if a[0]:
_, temp = a
print(temp.pankaj())
else:
print(a[0], a[1].pankaj()) # E: Item "None" of "Optional[Type[Temp]]" has no attribute "pankaj" [union-attr]
正如预期的那样,这只有一个
mypy
错误。这是 游乐场链接.