*blinks*
When did this happen?
I'm on Python-Ideas, Python-Dev, and I get announcements of new issues
on the bug tracker, and I don't recall ever seeing this feature
discussed.
Oddly I barely recall it either, even though according to PEP 487 it was posted five times to python-dev, and I approved it. It's a long time ago though (two retirements, for me :-).
[looks up the docs]
Okay, apparently it was added in 3.6. But the documentation says:
"""
When using the default metaclass type, or any metaclass that ultimately
calls type.__new__, the following additional customisation steps are
invoked after creating the class object:
first, type.__new__ collects all of the descriptors in the class
namespace that define a __set_name__() method;
"""
https://docs.python.org/3/reference/datamodel.html#class-object-creation
but that's not what is happening here, since my_property is not a
descriptor, it's just an arbitrary instance.
(To be a descriptor, it needs to have `__get__` and/or `__set__`
methods.)
Have I missed something or does this need a documentation fix?
That's a good observation. I think the PEP was only thinking of descriptors, and the implementation possibly took a shortcut by calling `__set_name__` on every attribute. Or perhaps the PEP was ambiguous, since under proposal, item (2) states that the "hook is called on all the attributes (descriptors) defined in the class".
Now there's a general rule that says "if you use a dunder in a way that's undocumented, the behavior is undefined" (and this includes making up your own dunders), which means that technically the implementation could do whatever it wants -- but since this is Python we probably want to accept that it's called for every attribute, whether it smells like a descriptor or not, and it would be nice to fix the docs.
Do you have the powers to submit PRs these days?