Note that the descriptor protocol itself is not causing this behavior. What actually happens here is that functions are descriptors (they implement __get__()) that generate the instancemethod object on attribute access.
More info here: <a href="https:&#x2F;&#x2F;wiki.python.org&#x2F;moin&#x2F;FromFunctionToMethod" rel="nofollow">https:&#x2F;&#x2F;wiki.python.org&#x2F;moin&#x2F;FromFunctionToMethod</a>