下面的代码在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

WidgetClassImp接收DataClass1的子类作为参数,导致类型不匹配.这令人惊讶,因为DataClass2是DataClass1的子类,实现了DataClass1接口.

我做错什么了吗?

推荐答案

子类不是父类.因此,声明WidgetClassImp需要Dataclass2将函数签名更改为其父项,因此类型不匹配.您还需要将Dataclass1声明为参数,并在逻辑中转换为Dataclass2或仅使用Dataclass1成员.

Python相关问答推荐

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

比较2 PD.数组的令人惊讶的结果

梯度下降:简化要素集的运行时间比原始要素集长

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

使用密钥字典重新配置嵌套字典密钥名

pandas:排序多级列

如何使用Numpy. stracards重新编写滚动和?

python panda ExcelWriter切换动态公式到数组公式

如何将一组组合框重置回无 Select tkinter?

Js的查询结果可以在PC Chrome上显示,但不能在Android Chrome、OPERA和EDGE上显示,而两者都可以在Firefox上运行

Pandas 数据帧中的枚举,不能在枚举列上执行GROUP BY吗?

pytest、xdist和共享生成的文件依赖项

仅取消堆叠最后三列

Django更新视图未更新

高效地计算数字数组中三行上三个点之间的Angular

try 在单个WITH_COLUMNS_SEQ操作中链接表达式时,使用Polars数据帧时出现ComputeError

用LAKEF划分实木地板AWS Wrangler

PYODBC错误(SQL包含-26272个参数标记,但提供了235872个参数,HY 000)

使用Django标签显示信息

使用OpenPYXL切换图表上的行/列