[Python-ideas] LOAD_NAME/LOAD_GLOBAL should be use getattr()
Chris Angelico
rosuav at gmail.com
Thu Sep 14 10:40:38 EDT 2017
More information about the Python-ideas mailing list
Thu Sep 14 10:40:38 EDT 2017
- Previous message (by thread): [Python-ideas] LOAD_NAME/LOAD_GLOBAL should be use getattr()
- Next message (by thread): [Python-ideas] PEP 561 v2 - Packaging Static Type Information
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Fri, Sep 15, 2017 at 12:08 AM, Serhiy Storchaka <storchaka at gmail.com> wrote: > 13.09.17 23:07, Lucas Wiman пише: >> >> On Wed, Sep 13, 2017 at 11:55 AM, Serhiy Storchaka <storchaka at gmail.com >> <mailto:storchaka at gmail.com>> wrote: >> >> [...] Calling __getattr__() will slow down the access to builtins. >> And there is a recursion problem if module's __getattr__() uses >> builtins. >> >> >> The first point is totally valid, but the recursion problem doesn't seem >> like a strong argument. There are already lots of recursion problems when >> defining custom __getattr__ or __getattribute__ methods, but on balance >> they're a very useful part of the language. > > > In normal classes we have the recursion problem in __getattr__() only with > accessing instance attributes. Builtins (like isinstance, getattr, > AttributeError) can be used without problems. In module's __getattr__() all > this is a problem. > > Module attribute access can be implicit. For example comparing a string with > a byte object in __getattr__() can trigger the lookup of __warningregistry__ > and the infinity recursion. Crazy idea: Can we just isolate that function from its module? def isolate(func): return type(func)(func.__code__, {"__builtins__": __builtins__}, func.__name__) @isolate def __getattr__(name): print("Looking up", name) # the lookup of 'print' will skip this module ChrisA
- Previous message (by thread): [Python-ideas] LOAD_NAME/LOAD_GLOBAL should be use getattr()
- Next message (by thread): [Python-ideas] PEP 561 v2 - Packaging Static Type Information
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-ideas mailing list