如何重写将省略号指定为 python 中参数的默认值的方法?

问题描述 投票:0回答:1

在 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: ...

通过准确指定打字来进行子类化的正确方法是什么

python python-typing pyside6
1个回答
0
投票

...
作为
.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,所以对此持保留态度。

© www.soinside.com 2019 - 2024. All rights reserved.