Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.

[Python-announce] attrs 23.1.0

Skip to first unread message

Hynek Schlawack

Apr 16, 2023, 8:11:03 AM4/16/23
I’m happy to announce a new release of attrs!

attrs is the direct ancestor of – and the inspiration for – dataclasses in the standard library and remains the more powerful toolkit for creating regular classes without getting bogged down with writing repetitive boilerplate code: <>


(alternatively, see <> for a richer-formatted version of the following)

Backwards-incompatible Changes

- Python 3.6 has been dropped and packaging switched to static package data using Hatch. #993


- The support for zope-interface via the attrs.validators.provides validator is now deprecated and will be removed in, or after, April 2024.

The presence of a C-based package in our developement dependencies has caused headaches and we're not under the impression it's used a lot.

Let us know if you're using it and we might publish it as a separate package. #1120


- attrs.filters.exclude() and attrs.filters.include() now support the passing of attribute names as strings. #1068

- attrs.has() and attrs.fields() now handle generic classes correctly. #1079

- Fix frozen exception classes when raised within e.g. contextlib.contextmanager, which mutates their __traceback__ attributes. #1081

- @frozen now works with type checkers that implement PEP-681 (ex. pyright). #1084

- Restored ability to unpickle instances pickled before 22.2.0. #1085

- attrs.asdict()'s and attrs.astuple()'s type stubs now accept the attrs.AttrsInstance protocol. #1090

- Fix slots class cellvar updating closure in CPython 3.8+ even when __code__ introspection is unavailable. #1092

- attrs.resolve_types() can now pass include_extras to typing.get_type_hints() on Python 3.9+, and does so by default. #1099

- Added instructions for pull request workflow to #1105

- Added type parameter to attrs.field() function for use with attrs.make_class().

Please note that type checkers ignore type metadata passed into make_class(), but it can be useful if you're wrapping attrs. #1107

- It is now possible for attrs.evolve() (and attr.evolve()) to change fields named inst if the instance is passed as a positional argument.

Passing the instance using the inst keyword argument is now deprecated and will be removed in, or after, April 2024. #1117

- attrs.validators.optional() now also accepts a tuple of validators (in addition to lists of validators). #1122

0 new messages