如何修复mypy提示的DataContainer返回值类型不兼容错误
修复mypy返回值类型不兼容错误
问题代码
DataObj数据类
from dataclasses import dataclass from typing import List, Tuple, Type @dataclass class DataObj: """ DataObj creates an object for each record in data """ name: str profit: int space: float
DataContainer类
class DataContainer: """ Data Container class holding objects of DataObj class """ def __init__(self, data_tuple_list: List[Tuple[str, int, float]]) -> None: self.container = [] for data_tuple in data_tuple_list: self.container.append(DataObj(*data_tuple)) def __getitem__(self, n: int) -> Type[DataObj]: return self.container.__getitem__(n)
mypy报错信息
error: Incompatible return value type (got "DataObj", expected "Type[DataObj]") Found 1 error in 1 file (checked 1 source file)
用户尝试两种修改均无效:
- 将
self.container标注为List[DataObj],仍返回相同的返回值类型不兼容错误; - 将
self.container标注为List[Type[DataObj]],则出现append方法参数类型不兼容错误。
解决方案
错误根源在于__getitem__的返回类型标注错误:Type[DataObj]代表的是DataObj类本身,而该方法实际返回的是DataObj的实例对象,正确的返回类型应该直接写DataObj。同时给self.container加上正确的类型标注List[DataObj],让mypy明确容器内的元素类型。
修改后的完整代码:
from dataclasses import dataclass from typing import List, Tuple @dataclass class DataObj: """ DataObj creates an object for each record in data """ name: str profit: int space: float class DataContainer: """ Data Container class holding objects of DataObj class """ def __init__(self, data_tuple_list: List[Tuple[str, int, float]]) -> None: self.container: List[DataObj] = [] for data_tuple in data_tuple_list: self.container.append(DataObj(*data_tuple)) def __getitem__(self, n: int) -> DataObj: return self.container.__getitem__(n)
内容的提问来源于stack exchange,提问作者Lawhatre
相关产品推荐
相关产品推荐

