【发布时间】:2019-06-16 16:58:24
【问题描述】:
我在以下代码中遇到类型检查器错误,我很想了解如何解决该错误。
下面的基类有一个抽象类方法,我希望从它继承的每个子类都实现一个decode函数,该函数返回子类的一个实例。
from abc import ABC, abstractmethod
from typing import TypeVar
TMetricBase = TypeVar("TMetricBase", bound="MetricBase")
class MetricBase(ABC):
@abstractmethod
def add(self, element: str) -> None:
pass # pragma: no cover
@classmethod
@abstractmethod
def decode(cls, json_str: str) -> TMetricBase:
pass # pragma: no cover
子类如下所示
import json
from typing import Any, Callable, List, Mapping, Optional
from something import MetricBase, TMetricBase
class DiscreteHistogramMetric(MetricBase):
def __init__(self, histogram: Optional[Mapping[str, int]]) -> None:
super().__init__()
self._histogram = dict(histogram) if histogram else {}
def add(self, element: str) -> None:
self._histogram[element] = self._histogram.get(element, 0) + 1
@classmethod
def decode(cls, json_str: str) -> "DiscreteHistogramMetric":
json_obj = json.loads(json_str)
histogram_map = json_obj["DiscreteHistogramMetric"]
return cls(histogram=histogram_map)
我收到以下错误:
error: Return type of "decode" incompatible with supertype "MetricBase"
将decode 的返回类型更改为TMetricBase 时,出现以下错误:
error: Incompatible return value type (got "DiscreteHistogramMetric", expected "TMetricBase")
【问题讨论】:
标签: python python-3.x type-hinting python-typing