在 Python v3.10 中,以下代码生成 Pylance 错误,指出(“EllipsisType”类型的表达式不能分配给“int”类型的参数)
from typing import Any
from PySide6.QtGui import QStandardItem
class A(QStandardItem):
def data(self, role: int = ...) -> Any:
return super().data(role)
pass
在QtGui.pyi中,QStandardItem的data方法定义如下
def data(self, role: int = ...) -> Any: ...
通过准确指定打字来进行子类化的正确方法是什么
...
作为 .pyi
文件中的默认值 不 意味着 文字 Ellipsis
对象。
相反,
role: int = ...
表示参数role
的类型为int
,并且在运行时具有相同类型的默认值,但该值在存根文件中被省略。
也就是说,您需要提供自己的默认值:
class A(QStandardItem):
def data(self, role: int = 42) -> Any:
return super().data(role)
如果你不关心LSP,就完全扔掉它吧:
class A(QStandardItem):
def data(self, role: int) -> Any:
return super().data(role)
使用
None
或类似的哨兵值是另一种选择:
class A(QStandardItem):
def data(self, role: int | None = None) -> Any:
if role is None:
return super().data()
return super().data(role)
我不了解 PySide6,所以对此持保留态度。