Improve several stdlib setdefault methods (#9612)

This commit is contained in:
Alex Waygood
2023-01-31 23:39:24 +00:00
committed by GitHub
parent 064f7af176
commit 9e71de0421
5 changed files with 37 additions and 6 deletions

View File

@@ -602,9 +602,13 @@ class MutableMapping(Mapping[_KT, _VT], Generic[_KT, _VT]):
def pop(self, __key: _KT, default: _VT | _T) -> _VT | _T: ...
def popitem(self) -> tuple[_KT, _VT]: ...
# This overload should be allowed only if the value type is compatible with None.
# Keep OrderedDict.setdefault in line with MutableMapping.setdefault, modulo positional-only differences.
#
# Keep the following methods in line with MutableMapping.setdefault, modulo positional-only differences:
# -- collections.OrderedDict.setdefault
# -- collections.ChainMap.setdefault
# -- weakref.WeakKeyDictionary.setdefault
@overload
def setdefault(self: MutableMapping[_KT, _T | None], __key: _KT) -> _T | None: ...
def setdefault(self: MutableMapping[_KT, _T | None], __key: _KT, __default: None = None) -> _T | None: ...
@overload
def setdefault(self, __key: _KT, __default: _VT) -> _VT: ...
# 'update' used to take a Union, but using overloading is better.