Mapping key type is invariant.

This commit is contained in:
Guido van Rossum 2015-06-07 13:36:19 -07:00
parent f8cd6632f6
commit 79e434d9e5
2 changed files with 8 additions and 8 deletions

View file

@ -707,11 +707,11 @@ class VarianceTests(TestCase):
typing.Sequence[Manager]) typing.Sequence[Manager])
def test_covariance_mapping(self): def test_covariance_mapping(self):
# Ditto for Mapping (a generic class with two parameters). # Ditto for Mapping (covariant in the value, invariant in the key).
assert issubclass(typing.Mapping[Employee, Manager], assert issubclass(typing.Mapping[Employee, Manager],
typing.Mapping[Employee, Employee]) typing.Mapping[Employee, Employee])
assert issubclass(typing.Mapping[Manager, Employee], assert not issubclass(typing.Mapping[Manager, Employee],
typing.Mapping[Employee, Employee]) typing.Mapping[Employee, Employee])
assert not issubclass(typing.Mapping[Employee, Manager], assert not issubclass(typing.Mapping[Employee, Manager],
typing.Mapping[Manager, Manager]) typing.Mapping[Manager, Manager])
assert not issubclass(typing.Mapping[Manager, Employee], assert not issubclass(typing.Mapping[Manager, Employee],

View file

@ -439,7 +439,6 @@ KT = TypeVar('KT') # Key type.
VT = TypeVar('VT') # Value type. VT = TypeVar('VT') # Value type.
T_co = TypeVar('T_co', covariant=True) # Any type covariant containers. T_co = TypeVar('T_co', covariant=True) # Any type covariant containers.
V_co = TypeVar('V_co', covariant=True) # Any type covariant containers. V_co = TypeVar('V_co', covariant=True) # Any type covariant containers.
KT_co = TypeVar('KT_co', covariant=True) # Key type covariant containers.
VT_co = TypeVar('VT_co', covariant=True) # Value type covariant containers. VT_co = TypeVar('VT_co', covariant=True) # Value type covariant containers.
T_contra = TypeVar('T_contra', contravariant=True) # Ditto contravariant. T_contra = TypeVar('T_contra', contravariant=True) # Ditto contravariant.
@ -1308,7 +1307,8 @@ class MutableSet(AbstractSet[T], extra=collections_abc.MutableSet):
pass pass
class Mapping(Sized, Iterable[KT_co], Container[KT_co], Generic[KT_co, VT_co], # NOTE: Only the value type is covariant.
class Mapping(Sized, Iterable[KT], Container[KT], Generic[KT, VT_co],
extra=collections_abc.Mapping): extra=collections_abc.Mapping):
pass pass
@ -1378,13 +1378,13 @@ class MappingView(Sized, Iterable[T_co], extra=collections_abc.MappingView):
pass pass
class KeysView(MappingView[KT_co], AbstractSet[KT_co], class KeysView(MappingView[KT], AbstractSet[KT],
extra=collections_abc.KeysView): extra=collections_abc.KeysView):
pass pass
# TODO: Enable Set[Tuple[KT_co, VT_co]] instead of Generic[KT_co, VT_co]. # TODO: Enable Set[Tuple[KT, VT_co]] instead of Generic[KT, VT_co].
class ItemsView(MappingView, Generic[KT_co, VT_co], class ItemsView(MappingView, Generic[KT, VT_co],
extra=collections_abc.ItemsView): extra=collections_abc.ItemsView):
pass pass