The descriptor how-to is wrong here. The Python data model has the correct description:
The following methods [__get__
, __set__
, and __delete__
] only apply when an instance of the class
containing the method (a so-called descriptor class) appears in an
owner class (the descriptor must be in either the owner’s class
dictionary or in the class dictionary for one of its parents).
Descriptors have to be class attributes.