On Sun Nov 30 2014 at 2:28:31 PM Ethan Furman <et...@stoneleaf.us> wrote:
> On 11/30/2014 11:15 AM, Guido van Rossum wrote: > > On Sun, Nov 30, 2014 at 6:15 AM, Brett Cannon wrote: > >> On Sat, Nov 29, 2014, 21:55 Guido van Rossum wrote: > >>> > >>> All the use cases seem to be about adding some kind of getattr hook > >>> to modules. They all seem to involve modifying the CPython C code > >>> anyway. So why not tackle that problem head-on and modify > module_getattro() > >>> to look for a global named __getattr__ and if it exists, call that > instead > >>> of raising AttributeError? > >> > >> Not sure if anyone thought of it. :) Seems like a reasonable solution > to me. > >> Be curious to know what the benchmark suite said the impact was. > > > > Why would there be any impact? The __getattr__ hook would be similar to > the > > one on classes -- it's only invoked at the point where otherwise > AttributeError > > would be raised. > > I think the bigger question is how do we support it back on 2.7? > You don't; you just can't shoehorn everything back to 2.7. And just to make sure everyone participating in this discussion is up on the latest import stuff, Python 3.4 does have Loader.create_module() <https://docs.python.org/3/library/importlib.html#importlib.abc.Loader.create_module> which lets you control what object is used for a module in the import machinery (this is prior to loading, though, so you can't specify it in a module but at the loader level only). This is how I was able to implement lazy loading for 3.5 <https://docs.python.org/3.5/library/importlib.html#importlib.util.LazyLoader> .
_______________________________________________ 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