[Python-Dev] PEP 487 vs 422 (dynamic class decoration) (original) (raw)
PJ Eby pje at telecommunity.com
Wed Apr 1 23:35:53 CEST 2015
- Previous message (by thread): [Python-Dev] [Python-checkins] cpython: Check deques against common sequence tests (except for slicing).
- Next message (by thread): [Python-Dev] PEP 487 vs 422 (dynamic class decoration)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I recently got an inquiry from some of my users about porting some of my libraries to Python 3 that make use of the Python 2 metaclass facility. While checking up on the status of PEP 422 today, I found out about its recently proposed replacement, PEP 487.
While PEP 487 is a generally fine PEP, it actually rules out the specific use case that I wanted PEP 422 for in the first place: dynamic addition of callbacks or decorators for use at class creation time without requiring explicit inheritance or metaclass participation. (So that e.g. method decorators can access the enclosing class at class definition time.)
As discussed previously prior to the creation of PEP 422, it is not possible to port certain features of my libraries to work on Python 3 without some form of that ability, and the only thing that I know of that could even potentially provide that ability outside of PEP 422 is monkeypatching build_class (which might not even work). That is, the very thing that PEP 422 was created to avoid the need for. ;-)
One possible alteration would be to replace init_subclass with some sort of init_class invoked on the class that provides it, not just subclasses. That would allow the kind of dynamic decoration that PEP 422 allows. However, this approach was rather specifically ruled out in earlier consideration of PEP 422, so....
Another alternative would be to have the default init_subclass look at a class-level decorators attribute, as originally discussed for PEP 422. That would solve my problem, but feels too much like adding more than One Way To Do It.
So... honestly, I'm not sure where to go from here. Is there any chance that this is going to be changed, or revert to the PEP 422 approach, or... something? If so, what Python version will the "something" be in? Or is this use case just going to be a dead parrot in Python 3, period?
- Previous message (by thread): [Python-Dev] [Python-checkins] cpython: Check deques against common sequence tests (except for slicing).
- Next message (by thread): [Python-Dev] PEP 487 vs 422 (dynamic class decoration)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]