Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions stdlib/typing.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -640,14 +640,17 @@ class AsyncGenerator(AsyncIterator[_YieldT_co], Protocol[_YieldT_co, _SendT_cont
) -> Coroutine[Any, Any, _YieldT_co]: ...
def aclose(self) -> Coroutine[Any, Any, None]: ...

_ContainerT_contra = TypeVar("_ContainerT_contra", contravariant=True, default=Any)

@runtime_checkable
class Container(Protocol[_T_co]):
class Container(Protocol[_ContainerT_contra]):
# This is generic more on vibes than anything else
@abstractmethod
def __contains__(self, x: object, /) -> bool: ...
def __contains__(self, x: _ContainerT_contra, /) -> bool: ...

@runtime_checkable
class Collection(Iterable[_T_co], Container[_T_co], Protocol[_T_co]):
class Collection(Iterable[_T_co], Container[Any], Protocol[_T_co]):
# Note: need to use Container[Any] instead of Container[_T_co] to ensure covariance.
# Implement Sized (but don't have it as a base class).
@abstractmethod
def __len__(self) -> int: ...
Expand Down