Issue 33265: contextlib.ExitStack abuses self (original) (raw)

Created on 2018-04-12 05:24 by jdemeyer, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 6456 merged jdemeyer,2018-04-12 05:28
Messages (5)
msg315212 - (view) Author: Jeroen Demeyer (jdemeyer) * (Python triager) Date: 2018-04-12 05:24
In contextlib, there is code which roughly looks like def _exit_wrapper(exc_type, exc, tb): return cm_exit(cm, exc_type, exc, tb) _exit_wrapper.__self__ = cm This creates a new function _exit_wrapper from a given function cm_exit by prepending the __self__ attribute to *args. Now this is exactly what a method does too. It would be better to use an actual method for this: it's cleaner, faster and it doesn't abuse a double-underscore attribute. The latter will actually break with PEP 575, as __self__ will become a special name instead of an arbitrary attribute.
msg315221 - (view) Author: Alyssa Coghlan (ncoghlan) * (Python committer) Date: 2018-04-12 12:25
Yury, could you double check the async exit stack change in the PR? I think it's fine since the bound method just passes back the underlying coroutine and the tests all still pass, but a second opinion would be good :)
msg315239 - (view) Author: Yury Selivanov (yselivanov) * (Python committer) Date: 2018-04-13 03:29
Yep, I think this is a good fix!
msg315243 - (view) Author: Alyssa Coghlan (ncoghlan) * (Python committer) Date: 2018-04-13 12:22
New changeset 23ab5ee667a9b29014f6f7f01797c611f63ff743 by Nick Coghlan (jdemeyer) in branch 'master': bpo-33265: use an actual method instead of a method-like function in ExitStack (GH-6456) https://github.com/python/cpython/commit/23ab5ee667a9b29014f6f7f01797c611f63ff743
msg315244 - (view) Author: Alyssa Coghlan (ncoghlan) * (Python committer) Date: 2018-04-13 12:25
Classifying this as a minor performance enhancement, since methods are much simpler objects than full Python level closures. Thanks!
History
Date User Action Args
2022-04-11 14:58:59 admin set github: 77446
2018-04-13 12:25:09 ncoghlan set status: open -> closedversions: + Python 3.8type: performancemessages: + resolution: fixedstage: patch review -> resolved
2018-04-13 12:22:50 ncoghlan set messages: +
2018-04-13 03:29:00 yselivanov set messages: +
2018-04-12 12:25:27 ncoghlan set nosy: + yselivanovmessages: +
2018-04-12 06:40:24 eric.smith set nosy: + ncoghlan
2018-04-12 05:28:43 jdemeyer set keywords: + patchstage: patch reviewpull_requests: + <pull%5Frequest6151>
2018-04-12 05:24:51 jdemeyer create