This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author mjpieters
Recipients mjpieters
Date 2019-03-04.18:05:02
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1551722702.8.0.594568497768.issue36188@roundup.psfhosted.org>
In-reply-to
Content
The implementation of method_hash, method_call and method_descr_get all still contain assumptions that __self__ can be set to None, a holdover from Python 2 where methods could be *unbound*.

These vestiges can safely be removed, because method_new() and PyMethod_New() both ensure that self is always non-null.

In addition, the datamodel description of methods includes this section:

      When a user-defined method object is created by retrieving another method
      object from a class or instance, the behaviour is the same as for a
      function object, except that the :attr:`__func__` attribute of the new
      instance is not the original method object but its :attr:`__func__`
      attribute.

which also only applies to Python 2 unbound methods. Python 3 bound methods never change what they are bound to, let alone produce a new method object from __get__ that has to be careful about what __func__ is set to.

I'm submitting a PR that removes these vestiges, no need to maintain code that never runs.
History
Date User Action Args
2019-03-04 18:05:02mjpieterssetrecipients: + mjpieters
2019-03-04 18:05:02mjpieterssetmessageid: <1551722702.8.0.594568497768.issue36188@roundup.psfhosted.org>
2019-03-04 18:05:02mjpieterslinkissue36188 messages
2019-03-04 18:05:02mjpieterscreate