| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| exec(textwrap.dedent( | ||
| """ | ||
| def test_pep695_generic_protocol_callable_members(self): | ||
| @runtime_checkable | ||
| class Foo[T](Protocol): | ||
| def meth(self, x: T) -> None: ... | ||
|
|
||
| class Bar[T]: | ||
| def meth(self, x: T) -> None: ... | ||
|
|
||
| self.assertIsInstance(Bar(), Foo) | ||
| self.assertIsSubclass(Bar, Foo) | ||
|
|
||
| @runtime_checkable | ||
| class SupportsTrunc[T](Protocol): | ||
| def __trunc__(self) -> T: ... | ||
|
|
||
| self.assertIsInstance(0.0, SupportsTrunc) | ||
| self.assertIsSubclass(float, SupportsTrunc) | ||
|
|
||
| def test_no_weird_caching_with_issubclass_after_isinstance_pep695(self): | ||
| @runtime_checkable | ||
| class Spam[T](Protocol): | ||
| x: T | ||
|
|
||
| class Eggs[T]: | ||
| def __init__(self, x: T) -> None: | ||
| self.x = x | ||
|
|
||
| self.assertIsInstance(Eggs(42), Spam) | ||
|
|
||
| # gh-104555: If we didn't override ABCMeta.__subclasscheck__ in _ProtocolMeta, | ||
| # TypeError wouldn't be raised here, | ||
| # as the cached result of the isinstance() check immediately above | ||
| # would mean the issubclass() call would short-circuit | ||
| # before we got to the "raise TypeError" line | ||
| with self.assertRaises(TypeError): | ||
| issubclass(Eggs, Spam) |
There was a problem hiding this comment.
I think these pass, but had no way of checking, since typing_extensions currently fails to import on 3.12:
Traceback (most recent call last):
File "C:\Users\alexw\coding\typing_extensions\src\test_typing_extensions.py", line 29, in <module>
import typing_extensions
File "C:\Users\alexw\coding\typing_extensions\src\typing_extensions.py", line 1361, in <module>
class TypeVar(typing.TypeVar, _DefaultMixin, _root=True):
TypeError: type 'typing.TypeVar' is not an acceptable base type
Sorry, something went wrong.
|
Oh, the PyPy version of ABCMeta results in a bunch of extra attributes being present in a class's __dict__? TIL. |
Sorry, something went wrong.
Ugh, that means we'll probably have to mark the test in CPython as @cpython_only. |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
Backports these PRs: