[Python-Dev] Comment on PEP 562 (Module __getattr__ and __dir__)

Mark Shannon mark at hotpy.org
Sun Nov 19 15:48:58 EST 2017



On 19/11/17 20:41, Serhiy Storchaka wrote:
> 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).

Not quite, ModuleType overrides object.__getattribute__ in order to 
provide a better error message. So with your suggestion, the change 
would be to *not* override object.__getattribute__ and provide the above 
ModuleType.__getattr__

Cheers,
Mark.


More information about the Python-Dev mailing list