работало с mypy?
Если делать свои аннотации ловлю Signature of "get" incompatible with supertype "dict", если пойти по пути создания TypeVar аналогичных typeshed'y, результат тот же.
На банальный
class CustomDict(dict[str, str]):
def get(self, __key: _KT, default: Optional[_VT_co | _T] = None) -> _VT_co | _T:
try:
return super(CustomDict, self).get(__key, default)
except KeyError:
return default
a = CustomDict({"key": "value"})
я ловлю
folder\test2.py:19: error: Returning Any from function declared to return "Union[_VT_co, _T]" [no-any-return]
folder\test2.py:19: error: No overload variant of "get" of "dict" matches argument types "_KT", "Union[_VT_co, _T, None]" [call-overload]
folder\test2.py:19: note: Possible overload variants:
folder\test2.py:19: note: def get(self, str, /) -> Optional[str]
folder\test2.py:19: note: def [_T] get(self, str, Union[str, _T], /) -> Union[str, _T]
folder\test2.py:21: error: Incompatible return value type (got "Union[_VT_co, _T, None]", expected "Union[_VT_co, _T]") [return-value]
этотому вообще можно дать аннотации или в этом нет смысла?
а зачем так вообще, переопредели __missing__
да не в missing дело, а в принципе как это аннотировать :)
DefaultT = TypeVar("DefaultT") class CustomDict(Dict[str, str]): @overload def get(self, key: str, /) -> Optional[str]: pass @overload def get( self, key: str, /, default: Union[str, DefaultT], ) -> Union[str, DefaultT]: pass def get( self, key: str, /, default: Union[str, DefaultT, None] = None, ) -> Union[str, DefaultT, None]: try: return super().get(key, default) except KeyError: return default
Обсуждают сегодня