In slotted classes' generated __getattr__(), we try __getattribute__() before __getattr__(), if available, and eventually let AttributeError propagate. This matches better with the behaviour described in Python's documentation Customizing attribute access.
[x] Do not open pull requests from your main branch – use a separate branch!
There's a ton of footguns waiting if you don't heed this warning. You can still go back to your project, create a branch from your main branch, push it, and open the pull request from the new branch.
This is not a pre-requisite for your your pull request to be accepted, but you have been warned.
[x] Added tests for changed code.
Our CI fails if coverage is not 100%.
[x] Changes or additions to public APIs are reflected in our type stubs (files ending in .pyi).
[x] ...and used in the stub test file tests/typing_example.py.
[x] If they've been added to attr/__init__.pyi, they've also been re-imported in attrs/__init__.pyi.
[x] Updated documentation for changed code.
[x] New functions/classes have to be added to docs/api.rst by hand.
[x] Changes to the signature of @attr.s() have to be added by hand too.
[x] Changed/added classes/methods/functions have appropriate versionadded, versionchanged, or deprecateddirectives.
The next version is the second number in the current release + 1.
The first number represents the current year.
So if the current version on PyPI is 22.2.0, the next version is gonna be 22.3.0.
If the next version is the first in the new year, it'll be 23.1.0.
[x] Documentation in .rst and .md files is written using semantic newlines.
[x] Changes (and possible deprecations) have news fragments in changelog.d.
Summary
In slotted classes' generated
__getattr__()
, we try__getattribute__()
before__getattr__()
, if available, and eventually letAttributeError
propagate. This matches better with the behaviour described in Python's documentation Customizing attribute access.Fix https://github.com/python-attrs/attrs/issues/1230
Pull Request Check List
main
branch – use a separate branch!.pyi
).tests/typing_example.py
.attr/__init__.pyi
, they've also been re-imported inattrs/__init__.pyi
.docs/api.rst
by hand.@attr.s()
have to be added by hand too.versionadded
,versionchanged
, ordeprecated
directives. The next version is the second number in the current release + 1. The first number represents the current year. So if the current version on PyPI is 22.2.0, the next version is gonna be 22.3.0. If the next version is the first in the new year, it'll be 23.1.0..rst
and.md
files is written using semantic newlines.changelog.d
.