2 ms·
Given all the problems people are mentioning, it seems like this proposal is on the wrong side. There should be an easy way for a module to declare itself to be
by ajb 1y ago
Given all the problems people are mentioning, it seems like this proposal is on the wrong side. There should be an easy way for a module to declare itself to be lazy loaded. The module author, not the user, is the one who knows whether lazy loading will break stuff.
- Grikbdl 1y agoIt's also simpler. It could even be a package level thing similar to typed.py marker. I don't want to pepper literally all my modules with loads of explicit lazy keywords.
- zahlman 1y ago> There should be an easy way for a module to declare itself to be lazy loaded. It can just implement lazy loading itself today, by using module-level __getattr__ (https://docs.python.org/3/reference/datamodel.html#customizing-module-attribute-access https://docs.python.org/3/reference/datamodel.html#customizi...) to overwrite itself with a private implementation module at the appropriate time. Something like: # foo.py def __getattr__(name): # clean up the lazy loader before loading # this way it's cleaned up if the implementation doesn't replace it, # and not scrubbed if it does global __getattr__ del __getattr__ import sys self = sys.modules[__name__] from . import _foo # "star-import" by adding names that show up in __dir__ self.__dict__.update(**{k: getattr(_foo, k) for k in _foo.__dir__()}) # On future attribute lookups, everything will be in place. # But this time, we need to delegate to the normal lookup explicitly return getattr(self, name) Genericizing this is left as an exercise.