[Python-ideas] LOAD_NAME/LOAD_GLOBAL should be use getattr()
Serhiy Storchaka
storchaka at gmail.com
Thu Sep 14 10:08:13 EDT 2017
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.
More information about the Python-ideas
mailing list