On Sun, Nov 30, 2014 at 1:12 PM, Antoine Pitrou <solip...@pitrou.net> wrote:
> On Sun, 30 Nov 2014 11:15:50 -0800 > Guido van Rossum <gu...@python.org> wrote: > > On Sun, Nov 30, 2014 at 6:15 AM, Brett Cannon <br...@python.org> wrote: > > > > > > On Sat, Nov 29, 2014, 21:55 Guido van Rossum <gu...@python.org> > 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. > > builtins are typically found by first looking up in the current globals > (module) scope, failing, and then falling back on __builtins__. > > Depending on how much overhead is added to the "failing" step, there > /might/ be a performance difference. Of course, that would only occur > wherever a __getattr__ hook is defined. > The builtins lookup process never does a module attribute lookup -- it only does dict lookups. So it would not be affected by a module __getattr__ hook (unless we were to use dict proxies, which Nathaniel already rejected). @Nathaniel: perhaps you could get what you want without any C code changes using the approach of Brett's LazyLoader? -- --Guido van Rossum (python.org/~guido)
_______________________________________________ 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