Skip to content

Commit 65405e9

Browse files
Make slice generic (#11637)
1 parent 9ed47fa commit 65405e9

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

stdlib/builtins.pyi

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ from _typeshed import (
99
ConvertibleToFloat,
1010
ConvertibleToInt,
1111
FileDescriptorOrPath,
12+
MaybeNone,
1213
OpenBinaryMode,
1314
OpenBinaryModeReading,
1415
OpenBinaryModeUpdating,
@@ -94,6 +95,9 @@ _SupportsAnextT = TypeVar("_SupportsAnextT", bound=SupportsAnext[Any], covariant
9495
_AwaitableT = TypeVar("_AwaitableT", bound=Awaitable[Any])
9596
_AwaitableT_co = TypeVar("_AwaitableT_co", bound=Awaitable[Any], covariant=True)
9697
_P = ParamSpec("_P")
98+
_StartT = TypeVar("_StartT", covariant=True, default=Any)
99+
_StopT = TypeVar("_StopT", covariant=True, default=Any)
100+
_StepT = TypeVar("_StepT", covariant=True, default=Any)
97101

98102
class object:
99103
__doc__: str | None
@@ -936,17 +940,25 @@ class bool(int):
936940
def __invert__(self) -> int: ...
937941

938942
@final
939-
class slice:
943+
class slice(Generic[_StartT, _StopT, _StepT]):
940944
@property
941-
def start(self) -> Any: ...
945+
def start(self) -> _StartT: ...
942946
@property
943-
def step(self) -> Any: ...
947+
def step(self) -> _StepT: ...
944948
@property
945-
def stop(self) -> Any: ...
949+
def stop(self) -> _StopT: ...
946950
@overload
947-
def __new__(cls, stop: Any, /) -> Self: ...
951+
def __new__(cls, stop: int | None) -> slice[int | MaybeNone, int | MaybeNone, int | MaybeNone]: ...
948952
@overload
949-
def __new__(cls, start: Any, stop: Any, step: Any = ..., /) -> Self: ...
953+
def __new__(
954+
cls, start: int | None, stop: int | None, step: int | None = None
955+
) -> slice[int | MaybeNone, int | MaybeNone, int | MaybeNone]: ...
956+
@overload
957+
def __new__(cls, stop: _T2, /) -> slice[Any, _T2, Any]: ...
958+
@overload
959+
def __new__(cls, start: _T1, stop: _T2, /) -> slice[_T1, _T2, Any]: ...
960+
@overload
961+
def __new__(cls, start: _T1, stop: _T2, step: _T3, /) -> slice[_T1, _T2, _T3]: ...
950962
def __eq__(self, value: object, /) -> bool: ...
951963
if sys.version_info >= (3, 12):
952964
def __hash__(self) -> int: ...

0 commit comments

Comments
 (0)