Fix false positive with calling .register() on KeysView subclass (#9348)

* Revert "`Collection` is `Sized` (#8977)"

This reverts commit 5bbba5d008.

* Revert "typing: remove metaclass from Sized (#9058)"

This reverts commit a3ce512095.

* Add regression test for issue 9296.
This commit is contained in:
Joshua Bronson
2022-12-10 13:09:28 -05:00
committed by GitHub
parent a74df38df0
commit 1ba0c9815e
2 changed files with 21 additions and 2 deletions

View File

@@ -325,7 +325,7 @@ class SupportsRound(Protocol[_T_co]):
def __round__(self, __ndigits: int) -> _T_co: ...
@runtime_checkable
class Sized(Protocol):
class Sized(Protocol, metaclass=ABCMeta):
@abstractmethod
def __len__(self) -> int: ...
@@ -452,7 +452,10 @@ class Container(Protocol[_T_co]):
def __contains__(self, __x: object) -> bool: ...
@runtime_checkable
class Collection(Sized, Iterable[_T_co], Container[_T_co], Protocol[_T_co]): ...
class Collection(Iterable[_T_co], Container[_T_co], Protocol[_T_co]):
# Implement Sized (but don't have it as a base class).
@abstractmethod
def __len__(self) -> int: ...
class Sequence(Collection[_T_co], Reversible[_T_co], Generic[_T_co]):
@overload

View File

@@ -0,0 +1,16 @@
from __future__ import annotations
import typing as t
KT = t.TypeVar("KT")
class MyKeysView(t.KeysView[KT]):
pass
d: dict[t.Any, t.Any] = {}
dict_keys = type(d.keys())
# This should not cause an error like `Member "register" is unknown`:
MyKeysView.register(dict_keys)