mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-07 04:34:28 +08:00
More precise overloads for get/pop methods (#10501)
Fixes #10293 Co-authored-by: AlexWaygood <alex.waygood@gmail.com>
This commit is contained in:
@@ -1096,14 +1096,18 @@ class dict(MutableMapping[_KT, _VT], Generic[_KT, _VT]):
|
||||
@overload
|
||||
def fromkeys(cls, __iterable: Iterable[_T], __value: _S) -> dict[_T, _S]: ...
|
||||
# Positional-only in dict, but not in MutableMapping
|
||||
@overload
|
||||
@overload # type: ignore[override]
|
||||
def get(self, __key: _KT) -> _VT | None: ...
|
||||
@overload
|
||||
def get(self, __key: _KT, __default: _VT | _T) -> _VT | _T: ...
|
||||
def get(self, __key: _KT, __default: _VT) -> _VT: ...
|
||||
@overload
|
||||
def get(self, __key: _KT, __default: _T) -> _VT | _T: ...
|
||||
@overload
|
||||
def pop(self, __key: _KT) -> _VT: ...
|
||||
@overload
|
||||
def pop(self, __key: _KT, __default: _VT | _T) -> _VT | _T: ...
|
||||
def pop(self, __key: _KT, __default: _VT) -> _VT: ...
|
||||
@overload
|
||||
def pop(self, __key: _KT, __default: _T) -> _VT | _T: ...
|
||||
def __len__(self) -> int: ...
|
||||
def __getitem__(self, __key: _KT) -> _VT: ...
|
||||
def __setitem__(self, __key: _KT, __value: _VT) -> None: ...
|
||||
|
||||
@@ -432,7 +432,9 @@ class ChainMap(MutableMapping[_KT, _VT], Generic[_KT, _VT]):
|
||||
@overload
|
||||
def pop(self, key: _KT) -> _VT: ...
|
||||
@overload
|
||||
def pop(self, key: _KT, default: _VT | _T) -> _VT | _T: ...
|
||||
def pop(self, key: _KT, default: _VT) -> _VT: ...
|
||||
@overload
|
||||
def pop(self, key: _KT, default: _T) -> _VT | _T: ...
|
||||
def copy(self) -> Self: ...
|
||||
__copy__ = copy
|
||||
# All arguments to `fromkeys` are passed to `dict.fromkeys` at runtime, so the signature should be kept in line with `dict.fromkeys`.
|
||||
|
||||
@@ -25,10 +25,14 @@ class ContextVar(Generic[_T]):
|
||||
def get(self) -> _T: ...
|
||||
if sys.version_info >= (3, 8):
|
||||
@overload
|
||||
def get(self, default: _D | _T) -> _D | _T: ...
|
||||
def get(self, default: _T) -> _T: ...
|
||||
@overload
|
||||
def get(self, default: _D) -> _D | _T: ...
|
||||
else:
|
||||
@overload
|
||||
def get(self, __default: _D | _T) -> _D | _T: ...
|
||||
def get(self, __default: _T) -> _T: ...
|
||||
@overload
|
||||
def get(self, __default: _D) -> _D | _T: ...
|
||||
|
||||
def set(self, __value: _T) -> Token[_T]: ...
|
||||
def reset(self, __token: Token[_T]) -> None: ...
|
||||
@@ -53,7 +57,9 @@ def copy_context() -> Context: ...
|
||||
class Context(Mapping[ContextVar[Any], Any]):
|
||||
def __init__(self) -> None: ...
|
||||
@overload
|
||||
def get(self, __key: ContextVar[_T]) -> _T | None: ...
|
||||
def get(self, __key: ContextVar[_T], __default: None = None) -> _T | None: ... # type: ignore[misc] # overlapping overloads
|
||||
@overload
|
||||
def get(self, __key: ContextVar[_T], __default: _T) -> _T: ...
|
||||
@overload
|
||||
def get(self, __key: ContextVar[_T], __default: _D) -> _T | _D: ...
|
||||
def run(self, callable: Callable[_P, _T], *args: _P.args, **kwargs: _P.kwargs) -> _T: ...
|
||||
|
||||
@@ -73,14 +73,18 @@ class DictProxy(BaseProxy, MutableMapping[_KT, _VT]):
|
||||
def __delitem__(self, __key: _KT) -> None: ...
|
||||
def __iter__(self) -> Iterator[_KT]: ...
|
||||
def copy(self) -> dict[_KT, _VT]: ...
|
||||
@overload
|
||||
@overload # type: ignore[override]
|
||||
def get(self, __key: _KT) -> _VT | None: ...
|
||||
@overload
|
||||
def get(self, __key: _KT, __default: _VT | _T) -> _VT | _T: ...
|
||||
def get(self, __key: _KT, __default: _VT) -> _VT: ...
|
||||
@overload
|
||||
def get(self, __key: _KT, __default: _T) -> _VT | _T: ...
|
||||
@overload
|
||||
def pop(self, __key: _KT) -> _VT: ...
|
||||
@overload
|
||||
def pop(self, __key: _KT, __default: _VT | _T) -> _VT | _T: ...
|
||||
def pop(self, __key: _KT, __default: _VT) -> _VT: ...
|
||||
@overload
|
||||
def pop(self, __key: _KT, __default: _T) -> _VT | _T: ...
|
||||
def keys(self) -> list[_KT]: ... # type: ignore[override]
|
||||
def items(self) -> list[tuple[_KT, _VT]]: ... # type: ignore[override]
|
||||
def values(self) -> list[_VT]: ... # type: ignore[override]
|
||||
|
||||
@@ -15,8 +15,10 @@ class Shelf(MutableMapping[str, _VT]):
|
||||
) -> None: ...
|
||||
def __iter__(self) -> Iterator[str]: ...
|
||||
def __len__(self) -> int: ...
|
||||
@overload # type: ignore[override]
|
||||
def get(self, key: str, default: None = None) -> _VT | None: ... # type: ignore[misc] # overlapping overloads
|
||||
@overload
|
||||
def get(self, key: str) -> _VT | None: ...
|
||||
def get(self, key: str, default: _VT) -> _VT: ...
|
||||
@overload
|
||||
def get(self, key: str, default: _T) -> _VT | _T: ...
|
||||
def __getitem__(self, key: str) -> _VT: ...
|
||||
|
||||
@@ -650,7 +650,9 @@ class MutableMapping(Mapping[_KT, _VT], Generic[_KT, _VT]):
|
||||
@overload
|
||||
def pop(self, __key: _KT) -> _VT: ...
|
||||
@overload
|
||||
def pop(self, __key: _KT, default: _VT | _T) -> _VT | _T: ...
|
||||
def pop(self, __key: _KT, default: _VT) -> _VT: ...
|
||||
@overload
|
||||
def pop(self, __key: _KT, default: _T) -> _VT | _T: ...
|
||||
def popitem(self) -> tuple[_KT, _VT]: ...
|
||||
# This overload should be allowed only if the value type is compatible with None.
|
||||
#
|
||||
|
||||
@@ -75,7 +75,9 @@ class WeakValueDictionary(MutableMapping[_KT, _VT]):
|
||||
@overload
|
||||
def pop(self, key: _KT) -> _VT: ...
|
||||
@overload
|
||||
def pop(self, key: _KT, default: _VT | _T = ...) -> _VT | _T: ...
|
||||
def pop(self, key: _KT, default: _VT) -> _VT: ...
|
||||
@overload
|
||||
def pop(self, key: _KT, default: _T) -> _VT | _T: ...
|
||||
if sys.version_info >= (3, 9):
|
||||
def __or__(self, other: Mapping[_T1, _T2]) -> WeakValueDictionary[_KT | _T1, _VT | _T2]: ...
|
||||
def __ror__(self, other: Mapping[_T1, _T2]) -> WeakValueDictionary[_KT | _T1, _VT | _T2]: ...
|
||||
@@ -118,7 +120,9 @@ class WeakKeyDictionary(MutableMapping[_KT, _VT]):
|
||||
@overload
|
||||
def pop(self, key: _KT) -> _VT: ...
|
||||
@overload
|
||||
def pop(self, key: _KT, default: _VT | _T = ...) -> _VT | _T: ...
|
||||
def pop(self, key: _KT, default: _VT) -> _VT: ...
|
||||
@overload
|
||||
def pop(self, key: _KT, default: _T) -> _VT | _T: ...
|
||||
if sys.version_info >= (3, 9):
|
||||
def __or__(self, other: Mapping[_T1, _T2]) -> WeakKeyDictionary[_KT | _T1, _VT | _T2]: ...
|
||||
def __ror__(self, other: Mapping[_T1, _T2]) -> WeakKeyDictionary[_KT | _T1, _VT | _T2]: ...
|
||||
|
||||
Reference in New Issue
Block a user