On Sun, Nov 30, 2014 at 7:27 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?
I think that's doable -- assuming I'm remembering correctly the slightly weird class vs. instance lookup rules for special methods, you can write a module subclass like class GetAttrModule(types.ModuleType): def __getattr__(self, name): return self.__dict__["__getattr__"](name) and then use ctypes hacks to get it into sys.modules[__name__]. -n -- Nathaniel J. Smith Postdoctoral researcher - Informatics - University of Edinburgh http://vorpus.org _______________________________________________ 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