4.7.0rc1
This is a pre-release; please test it! 4.7.0 final is expected in one week (June 28).
Changelog:
- Add
typing_extensions.get_protocol_membersand
typing_extensions.is_protocol(backport of CPython PR #104878).
Patch by Jelle Zijlstra. typing_extensionsnow re-exports all names in the standard library's
typingmodule, except the deprecatedByteString. Patch by Jelle
Zijlstra.- Due to changes in the implementation of
typing_extensions.Protocol,
typing.runtime_checkablecan now be used ontyping_extensions.Protocol
(previously, users had to usetyping_extensions.runtime_checkableif they
were usingtyping_extensions.Protocol). - Align the implementation of
TypedDictwith the implementation in the
standard library on Python 3.9 and higher.
typing_extensions.TypedDictis now a function instead of a class. The
private functions_check_fails,_dict_new, and_typeddict_new
have been removed.is_typeddictnow returnsFalsewhen called with
TypedDictitself as the argument. Patch by Jelle Zijlstra. - Declare support for Python 3.12. Patch by Jelle Zijlstra.
- Fix tests on Python 3.13, which removes support for creating
TypedDictclasses through the keyword-argument syntax. Patch by
Jelle Zijlstra. - Fix a regression introduced in v4.6.3 that meant that
issubclass(object, typing_extensions.Protocol)would erroneously raise
TypeError. Patch by Alex Waygood (backporting the CPython PR
python/cpython#105239). - Allow
Protocolclasses to inherit fromtyping_extensions.Bufferor
collections.abc.Buffer. Patch by Alex Waygood (backporting
python/cpython#104827, by Jelle Zijlstra). - Allow classes to inherit from both
typing.Protocolandtyping_extensions.Protocol
simultaneously. Since v4.6.0, this causedTypeErrorto be raised due to a
metaclass conflict. Patch by Alex Waygood. - Backport several deprecations from CPython relating to unusual ways to
createTypedDicts andNamedTuples. CPython PRs #105609 and #105780
by Alex Waygood;typing_extensionsbackport by Jelle Zijlstra.- Creating a
NamedTupleusing the functional syntax with keyword arguments
(NT = NamedTuple("NT", a=int)) is now deprecated. - Creating a
NamedTuplewith zero fields using the syntaxNT = NamedTuple("NT")
orNT = NamedTuple("NT", None)is now deprecated. - Creating a
TypedDictwith zero fields using the syntaxTD = TypedDict("TD")
orTD = TypedDict("TD", None)is now deprecated.
- Creating a
- Fix bug on Python 3.7 where a protocol
Xthat had a memberawould not be
considered an implicit subclass of an unrelated protocolYthat only has a
membera. Where the members ofXare a superset of the members ofY,
Xshould always be considered a subclass ofYiffYis a
runtime-checkable protocol that only has callable members. Patch by Alex
Waygood (backporting CPython PR
python/cpython#105835).