19.11.17 22:24, Mark Shannon пише:
> Just one comment. Could the new behaviour of attribute lookup on a
> module be spelled out more explicitly please?
>>> I'm guessing it is now something like:
>> `module.__getattribute__` is now equivalent to:
>> def __getattribute__(mod, name):
> try:
> return object.__getattribute__(mod, name)
> except AttributeError:
> try:
> getter = mod.__dict__["__getattr__"]
> except KeyError:
> raise AttributeError(f"module has no attribute '{name}'")
> return getter(name)
I think it is better to describe in the terms of __getattr__.
def ModuleType.__getattr__(mod, name):
try:
getter = mod.__dict__["__getattr__"]
except KeyError:
raise AttributeError(f"module has no attribute '{name}'")
return getter(name)
The implementation of ModuleType.__getattribute__ will be not changed
(it is inherited from the object type).