python - 使用子类时类型不匹配

标签 python python-typing pyright

以下代码在 Python 严格类型检查下给出了类型不匹配错误。

class DataClass1(ABC):
    @abstractmethod
    def to_int(self) -> int:
        return 1

class DataClass2(DataClass1):
    def __init__(self, value: int):
        self.value = value
    
    def to_int(self) -> int:
        return self.value 

class WidgetClass(ABC):
    @abstractmethod
    def calculate(self, data: DataClass1) -> DataClass1:
        pass

class WidgetClassImp(WidgetClass):
    def calculate(self, data: DataClass2):
        return data

接收 DataClass1 的子类作为参数的 WidgetClassImp 导致类型不匹配发生。这是令人惊讶的,因为 DataClass2 是 DataClass1 的子类并实现了 DataClass1 接口(interface)。

我做错了什么吗?

最佳答案

子类不是父类。因此,声明需要 Dataclass2 的 WidgetClassImp 会将函数签名更改为其父级,因此类型不匹配。您还需要将 Dataclass1 声明为参数,并在逻辑内部强制转换为 Dataclass2 或仅使用 dataclass1 成员。

关于python - 使用子类时类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72926842/

相关文章:

python - 指定 TypeVar 支持其值中的 "-"运算符

python - 属性错误 : 'module' object has no attribute 'pydebug'

python - 在Python中使用 bool 逻辑隔离pandas列

python - 特定 Enum 值的类型注释

Python 类型注解 : Proper way to annotate functions returning library object

python - 类型提示返回 NameError : name 'datetime' not defined

python - 有没有办法在 Python TypedDict 中指定任意额外内容?

python - 为 500 万元素目录中的每个元素寻找 3D 欧几里德空间中的 10 个最近点

python - 使用 numpy fft 提取相位信息