On Thu, Apr 2, 2015 at 1:42 PM, PJ Eby <p...@telecommunity.com> wrote: > If the PEP 487 metaclass library, > however, were to just port some bits of my code to Python 3 this could > be a done deal already and available in *all* versions of Python 3, > not just the next one.
Just for the heck of it, here's an actual implementation and demo of PEP 487, that I've tested with 3.1, 3.2, and 3.4 (I didn't have a copy of 3.3 handy): https://gist.github.com/pjeby/75ca26f8d2a7a0c68e30 The first module is just a demo that shows the features in use. The second module is the implementation. Notice that the actual *functionality* of PEP 487 is just *16 lines* in Python 3... including docstrings and an `__all__` definition. ;-) The other 90 lines of code are only there to implement the `noconflict` feature for fixing metaclass conflicts... and quite a lot of *those* lines are comments and docstrings. ;-) Anyway, I think this demo is a knockout argument for why PEP 487 doesn't need a language change: if you're writing an __init_subclass__ method you just include the `pep487.init_subclasses` base in your base classes, and you're done. It'll silently fail if you leave it out (but you'll notice that right away), and it *won't* fail in third-party subclasses because the *third party* didn't include it. In contrast, PEP 422 provided a way to have both the features contemplated by 487, *and* a way to allow method-level decorators to discover the class at class creation time. If there's going to be a language change, it should include that latter feature from the outset. _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com