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