Skip to content

Commit

Permalink
pythongh-91491: Add several typing features to What's New
Browse files Browse the repository at this point in the history
This gets all the major items in python#91491. However, I didn't get around to
adding what's new entries for the large clump of changes in the last
bullet point in the issue.
  • Loading branch information
hauntsaninja committed Apr 29, 2022
1 parent 53ca774 commit dd82399
Showing 1 changed file with 64 additions and 0 deletions.
64 changes: 64 additions & 0 deletions Doc/whatsnew/3.11.rst
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,38 @@ See :pep:`675` for more details.
(Contributed by Jelle Zijlstra in :issue:`47088`. PEP written by Pradeep
Kumar Srinivasan and Graham Bleaney.)

PEP 681: Data Class Transforms
------------------------------

The new :data:`~typing.dataclass_transform` annotation may be used to
decorate a function that is itself a decorator, a class, or a metaclass.
The presence of dataclass_transform tells a static type checker that the
decorated function, class, or metaclass performs runtime "magic" that
transforms a class, endowing it with dataclass-like behaviors.

For example::

# The ``create_model`` decorator is defined by a library.
@typing.dataclass_transform()
def create_model(cls: Type[_T]) -> Type[_T]:
cls.__init__ = ...
cls.__eq__ = ...
cls.__ne__ = ...
return cls

# The ``create_model`` decorator can now be used to create new model
# classes, like this:
@create_model
class CustomerModel:
id: int
name: str

c = CustomerModel(id=327, name="John Smith")

See :pep:`681` for more details.

(Contributed by Jelle Zijlstra in :issue:`91860`. PEP written by
Erik De Bonte and Eric Traut.)

Other Language Changes
======================
Expand Down Expand Up @@ -649,6 +681,38 @@ time
it had a resolution of 1 millisecond (10\ :sup:`-3` seconds).
(Contributed by Benjamin Szőke, Dong-hee Na, Eryk Sun and Victor Stinner in :issue:`21302` and :issue:`45429`.)

typing
------

For major changes, see :ref:`new-feat-related-type-hints-311`.

* Add :func:`typing.assert_never` and :class:`typing.Never`.
:func:`typing.assert_never` is useful for asking a type checker to confirm
that a line of code is not reachable. At runtime, it raises an
:exc:`AssertionError`.
(Contributed by Jelle Zijlstra in :issue:`90633`.)

* Add :func:`typing.reveal_type`. This is useful for asking a type checker
what type it has inferred for a given expression. At runtime it prints
the type of the received value.
(Contributed by Jelle Zijlstra in :issue:`90572`.)

* Add :func:`typing.assert_type`. This is useful for asking a type checker
to confirm that the type it has inferred for a given expression matches
the given type. At runtime it simply returns the received value.
(Contributed by Jelle Zijlstra in :issue:`90638`.)

* Allow subclassing of :class:`typing.Any`. This is useful for avoiding
type checker errors related to highly dynamic class, such as mocks.
(Contributed by Shantanu Jain in :issue:`91154`.)

* The :func:`typing.final` decorator now sets the ``__final__`` attributed on
the decorated object.
(Contributed by Jelle Zijlstra in :issue:`90500`.)

* The :func:`typing.get_overloads` function can be used for introspecting
the overloads of a function.
(Contributed by Jelle Zijlstra in :issue:`89263`.)

unicodedata
-----------
Expand Down

0 comments on commit dd82399

Please sign in to comment.