Skip to content

Commit 25a45d6

Browse files
author
Guido van Rossum
committed
Revert "WIP: Mapping.{get,pop} can return default type (#223)"
This reverts commit d43adbe. Here's a simple example of code that breaks with this PR: from typing import Mapping, Dict, Tuple a = {('0', '0'): 42} # type: Mapping[Tuple[str, str], int] b = a.get(('1', '1'), 0) This gives an error on the last line: error: No overload variant of "get" of "dict" matches argument types [Tuple[builtins.str, builtins.str], builtins.int]
1 parent d43adbe commit 25a45d6

File tree

4 files changed

+20
-44
lines changed

4 files changed

+20
-44
lines changed

stdlib/2.7/__builtin__.pyi

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ from typing import (
88
Sequence, Mapping, Tuple, List, Any, Dict, Callable, Generic, Set,
99
AbstractSet, Sized, Reversible, SupportsInt, SupportsFloat, SupportsAbs,
1010
SupportsRound, IO, BinaryIO, Union, AnyStr, MutableSequence, MutableMapping,
11-
MutableSet, Optional,
11+
MutableSet
1212
)
1313
from abc import abstractmethod, ABCMeta
1414

@@ -534,14 +534,8 @@ class dict(MutableMapping[_KT, _VT], Generic[_KT, _VT]):
534534
def has_key(self, k: _KT) -> bool: ...
535535
def clear(self) -> None: ...
536536
def copy(self) -> Dict[_KT, _VT]: ...
537-
@overload
538-
def get(self, k: _KT) -> Optional[_VT]: ...
539-
@overload
540-
def get(self, k: _KT, default: _T) -> Union[_VT, _T]: ...
541-
@overload
542-
def pop(self, k: _KT) -> _VT: ...
543-
@overload
544-
def pop(self, k: _KT, default: _T) -> Union[_VT, _T]: ...
537+
def get(self, k: _KT, default: _VT = None) -> _VT: ...
538+
def pop(self, k: _KT, default: _VT = ...) -> _VT: ...
545539
def popitem(self) -> Tuple[_KT, _VT]: ...
546540
def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ...
547541
@overload

stdlib/2.7/typing.pyi

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -157,20 +157,17 @@ class MutableSet(AbstractSet[_T], Generic[_T]):
157157
def __ixor__(self, s: AbstractSet[_S]) -> MutableSet[Union[_T, _S]]: ...
158158
def __isub__(self, s: AbstractSet[Any]) -> MutableSet[_T]: ...
159159

160-
class Mapping(Sized, Iterable[_KT], Container[_KT], Generic[_KT, _VT_co]):
160+
class Mapping(Sized, Iterable[_KT], Container[_KT], Generic[_KT, _VT]):
161161
@abstractmethod
162-
def __getitem__(self, k: _KT) -> _VT_co: ...
162+
def __getitem__(self, k: _KT) -> _VT: ...
163163
# Mixin methods
164-
@overload
165-
def get(self, k: _KT) -> Optional[_VT_co]: ...
166-
@overload
167-
def get(self, k: _KT, default: _T) -> Union[_VT_co, _T]: ...
164+
def get(self, k: _KT, default: _VT = ...) -> _VT: ...
168165
def keys(self) -> list[_KT]: ...
169-
def values(self) -> list[_VT_co]: ...
170-
def items(self) -> list[Tuple[_KT, _VT_co]]: ...
166+
def values(self) -> list[_VT]: ...
167+
def items(self) -> list[Tuple[_KT, _VT]]: ...
171168
def iterkeys(self) -> Iterator[_KT]: ...
172-
def itervalues(self) -> Iterator[_VT_co]: ...
173-
def iteritems(self) -> Iterator[Tuple[_KT, _VT_co]]: ...
169+
def itervalues(self) -> Iterator[_VT]: ...
170+
def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ...
174171
def __contains__(self, o: object) -> bool: ...
175172

176173
class MutableMapping(Mapping[_KT, _VT], Generic[_KT, _VT]):
@@ -180,10 +177,7 @@ class MutableMapping(Mapping[_KT, _VT], Generic[_KT, _VT]):
180177
def __delitem__(self, v: _KT) -> None: ...
181178

182179
def clear(self) -> None: ...
183-
@overload
184-
def pop(self, k: _KT) -> _VT: ...
185-
@overload
186-
def pop(self, k: _KT, default: _T) -> Union[_VT, _T]: ...
180+
def pop(self, k: _KT, default: _VT = ...) -> _VT: ...
187181
def popitem(self) -> Tuple[_KT, _VT]: ...
188182
def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ...
189183
@overload

stdlib/3/builtins.pyi

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ from typing import (
44
TypeVar, Iterator, Iterable, overload,
55
Sequence, MutableSequence, Mapping, MutableMapping, Tuple, List, Any, Dict, Callable, Generic,
66
Set, AbstractSet, MutableSet, Sized, Reversible, SupportsInt, SupportsFloat, SupportsBytes,
7-
SupportsAbs, SupportsRound, IO, Union, ItemsView, KeysView, ValuesView, ByteString, Optional,
7+
SupportsAbs, SupportsRound, IO, Union, ItemsView, KeysView, ValuesView, ByteString
88
)
99
from abc import abstractmethod, ABCMeta
1010

@@ -507,14 +507,8 @@ class dict(MutableMapping[_KT, _VT], Generic[_KT, _VT]):
507507
def __init__(self, iterable: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ...
508508
def clear(self) -> None: ...
509509
def copy(self) -> Dict[_KT, _VT]: ...
510-
@overload
511-
def get(self, k: _KT) -> Optional[_VT]: ...
512-
@overload
513-
def get(self, k: _KT, default: _T) -> Union[_VT, _T]: ...
514-
@overload
515-
def pop(self, k: _KT) -> _VT: ...
516-
@overload
517-
def pop(self, k: _KT, default: _T) -> Union[_VT, _T]: ...
510+
def get(self, k: _KT, default: _VT = None) -> _VT: ...
511+
def pop(self, k: _KT, default: _VT = None) -> _VT: ...
518512
def popitem(self) -> Tuple[_KT, _VT]: ...
519513
def setdefault(self, k: _KT, default: _VT = None) -> _VT: ...
520514
@overload

stdlib/3/typing.pyi

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -215,19 +215,16 @@ class ValuesView(MappingView, Iterable[_VT_co], Generic[_VT_co]):
215215

216216
# TODO: ContextManager (only if contextlib.AbstractContextManager exists)
217217

218-
class Mapping(Iterable[_KT], Container[_KT], Sized, Generic[_KT, _VT_co]):
218+
class Mapping(Iterable[_KT], Container[_KT], Sized, Generic[_KT, _VT]):
219219
# TODO: Value type should be covariant, but currently we can't give a good signature for
220220
# get if this is the case.
221221
@abstractmethod
222-
def __getitem__(self, k: _KT) -> _VT_co: ...
222+
def __getitem__(self, k: _KT) -> _VT: ...
223223
# Mixin methods
224-
@overload
225-
def get(self, k: _KT) -> Optional[_VT_co]: ...
226-
@overload
227-
def get(self, k: _KT, default: _T) -> Union[_VT_co, _T]: ...
228-
def items(self) -> AbstractSet[Tuple[_KT, _VT_co]]: ...
224+
def get(self, k: _KT, default: _VT = ...) -> _VT: ...
225+
def items(self) -> AbstractSet[Tuple[_KT, _VT]]: ...
229226
def keys(self) -> AbstractSet[_KT]: ...
230-
def values(self) -> ValuesView[_VT_co]: ...
227+
def values(self) -> ValuesView[_VT]: ...
231228
def __contains__(self, o: object) -> bool: ...
232229

233230
class MutableMapping(Mapping[_KT, _VT], Generic[_KT, _VT]):
@@ -237,10 +234,7 @@ class MutableMapping(Mapping[_KT, _VT], Generic[_KT, _VT]):
237234
def __delitem__(self, v: _KT) -> None: ...
238235

239236
def clear(self) -> None: ...
240-
@overload
241-
def pop(self, k: _KT) -> _VT: ...
242-
@overload
243-
def pop(self, k: _KT, default: _T) -> Union[_VT, _T]: ...
237+
def pop(self, k: _KT, default: _VT = ...) -> _VT: ...
244238
def popitem(self) -> Tuple[_KT, _VT]: ...
245239
def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ...
246240
# 'update' used to take a Union, but using overloading is better.

0 commit comments

Comments
 (0)