[Python-Dev] About 'superobject' and descriptors

hakril lse hakril at lse.epita.fr
Wed Oct 23 19:29:03 CEST 2013


Hi,

I have a question about a choice of implementation concerning
'superobject' with the descriptors.

When a 'superobject' looks for a given attribute, it runs through the
mro of the object.
If it finds a descriptor, the 'superobject' calls the __get__ method
with 'starttype = su->obj_type' as third argument (in typeobject.c:
super_getattro).

So, the 'type' argument of __get__ does not give more information
about the 'real calling type' in this case.
It seems that this is just a redundant information of inst.__class__.

For example:

    # A.descr is a descriptor
    # B inherit from A
    # C inherit from B

        c = C()
        c.descr
        super(C, c).descr
        super(B, c).descr

In these 3 cases the __get__ method is called with the same arguments
that are : __get__(descr, c, C).

If this behavior is really expected: Could you explain why ? because
it means that I am missing something obvious.
Because, at first sight, the 'type' argument seems to be the perfect
place to get the type of the 'real calling class'.

Thank you,

-- 
hakril


More information about the Python-Dev mailing list