mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-07 20:54:28 +08:00
Make Mapping covariant. (#512)
* Make Mapping covariant. Fixes #510. This requires a `# type: ignore` on `__getitem__` and `get` because mypy complains about covariant parameters. FWIW typing.py needs to be changed too. (It was covariant in the value but invariant in the key -- typeshed was invariant in both.) * Delete outdated comment. * Backpeddle a bit -- Mapping key type should not be covariant.
This commit is contained in:
committed by
Jukka Lehtosalo
parent
1d5b35b2a5
commit
25cb6e4ab4
@@ -176,17 +176,21 @@ class ValuesView(MappingView, Iterable[_VT_co], Generic[_VT_co]):
|
||||
def __contains__(self, o: object) -> bool: ...
|
||||
def __iter__(self) -> Iterator[_VT_co]: ...
|
||||
|
||||
class Mapping(Sized, Iterable[_KT], Container[_KT], Generic[_KT, _VT]):
|
||||
class Mapping(Sized, Iterable[_KT], Container[_KT], Generic[_KT, _VT_co]):
|
||||
# TODO: We wish the key type could also be covariant, but that doesn't work,
|
||||
# see discussion in https://github.com/python/typing/pull/273.
|
||||
@abstractmethod
|
||||
def __getitem__(self, k: _KT) -> _VT: ...
|
||||
def __getitem__(self, k: _KT) -> _VT_co:
|
||||
...
|
||||
# Mixin methods
|
||||
def get(self, k: _KT, default: _VT = ...) -> _VT: ...
|
||||
def get(self, k: _KT, default: _VT_co = ...) -> _VT_co: # type: ignore
|
||||
...
|
||||
def keys(self) -> list[_KT]: ...
|
||||
def values(self) -> list[_VT]: ...
|
||||
def items(self) -> list[Tuple[_KT, _VT]]: ...
|
||||
def values(self) -> list[_VT_co]: ...
|
||||
def items(self) -> list[Tuple[_KT, _VT_co]]: ...
|
||||
def iterkeys(self) -> Iterator[_KT]: ...
|
||||
def itervalues(self) -> Iterator[_VT]: ...
|
||||
def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ...
|
||||
def itervalues(self) -> Iterator[_VT_co]: ...
|
||||
def iteritems(self) -> Iterator[Tuple[_KT, _VT_co]]: ...
|
||||
def __contains__(self, o: object) -> bool: ...
|
||||
|
||||
class MutableMapping(Mapping[_KT, _VT], Generic[_KT, _VT]):
|
||||
|
||||
@@ -226,16 +226,18 @@ class ValuesView(MappingView, Iterable[_VT_co], Generic[_VT_co]):
|
||||
|
||||
# TODO: ContextManager (only if contextlib.AbstractContextManager exists)
|
||||
|
||||
class Mapping(Iterable[_KT], Container[_KT], Sized, Generic[_KT, _VT]):
|
||||
# TODO: Value type should be covariant, but currently we can't give a good signature for
|
||||
# get if this is the case.
|
||||
class Mapping(Iterable[_KT], Container[_KT], Sized, Generic[_KT, _VT_co]):
|
||||
# TODO: We wish the key type could also be covariant, but that doesn't work,
|
||||
# see discussion in https://github.com/python/typing/pull/273.
|
||||
@abstractmethod
|
||||
def __getitem__(self, k: _KT) -> _VT: ...
|
||||
def __getitem__(self, k: _KT) -> _VT_co:
|
||||
...
|
||||
# Mixin methods
|
||||
def get(self, k: _KT, default: _VT = ...) -> _VT: ...
|
||||
def items(self) -> AbstractSet[Tuple[_KT, _VT]]: ...
|
||||
def get(self, k: _KT, default: _VT_co = ...) -> _VT_co: # type: ignore
|
||||
...
|
||||
def items(self) -> AbstractSet[Tuple[_KT, _VT_co]]: ...
|
||||
def keys(self) -> AbstractSet[_KT]: ...
|
||||
def values(self) -> ValuesView[_VT]: ...
|
||||
def values(self) -> ValuesView[_VT_co]: ...
|
||||
def __contains__(self, o: object) -> bool: ...
|
||||
|
||||
class MutableMapping(Mapping[_KT, _VT], Generic[_KT, _VT]):
|
||||
|
||||
Reference in New Issue
Block a user