以下代码在 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/