[Python-Dev] PEP 447 (type.__getdescriptor__)

Ronald Oussoren ronaldoussoren at mac.com
Sun Jul 26 11:41:53 CEST 2015


> On 26 Jul 2015, at 09:14, Ronald Oussoren <ronaldoussoren at mac.com> wrote:
> 
> 
>> On 25 Jul 2015, at 17:39, Mark Shannon <mark at hotpy.org <mailto:mark at hotpy.org>> wrote:
>> 
>> Hi,
>> 
>> On 22/07/15 09:25, Ronald Oussoren wrote:> Hi,
>>> 
>>> Another summer with another EuroPython, which means its time again to 
>>> try to revive PEP 447…
>>> 
>> 
>> IMO, there are two main issues with the PEP and implementation.
>> 
>> 1. The implementation as outlined in the PEP is infinitely recursive, since the
>> lookup of "__getdescriptor__" on type must necessarily call
>> type.__getdescriptor__.
>> The implementation (in C) special cases classes that inherit "__getdescriptor__"
>> from type. This special casing should be mentioned in the PEP.
> 
> Sure.  An alternative is to slightly change the the PEP: use __getdescriptor__ when
> present and directly peek into __dict__ when it is not, and then remove the default
> __getdescriptor__. 
> 
> The reason I didn’t do this in the PEP is that I prefer a programming model where
> I can explicitly call the default behaviour. 

I’m not sure there is a problem after all (but am willing to use the alternative I describe above),
although that might be because I’m too much focussed on CPython semantics.

The __getdescriptor__ method is a slot in the type object and because of that the
 normal attribute lookup mechanism is side-stepped for methods implemented in C. A
__getdescriptor__ that is implemented on Python is looked up the normal way by the 
C function that gets added to the type struct for such methods, but that’s not a problem for
type itself.

That’s not new for __getdescriptor__ but happens for most other special methods as well,
as I noted in my previous mail, and also happens for the __dict__ lookup that’s currently
used (t.__dict__ is an attribute and should be lookup up using __getattribute__, …)

Ronald
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20150726/9cfd3da5/attachment.html>


More information about the Python-Dev mailing list