[Python-Dev] advice needed: best approach to enabling "metamodules"?

Brett Cannon brett at python.org
Sun Nov 30 20:41:03 CET 2014


On Sun Nov 30 2014 at 2:28:31 PM Ethan Furman <ethan at 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>
.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20141130/267fa27e/attachment.html>


More information about the Python-Dev mailing list