<p dir="ltr"><br>
On 24 Oct 2013 03:37, "hakril lse" <<a href="mailto:hakril@lse.epita.fr">hakril@lse.epita.fr</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> I have a question about a choice of implementation concerning<br>
> 'superobject' with the descriptors.<br>
><br>
> When a 'superobject' looks for a given attribute, it runs through the<br>
> mro of the object.<br>
> If it finds a descriptor, the 'superobject' calls the __get__ method<br>
> with 'starttype = su->obj_type' as third argument (in typeobject.c:<br>
> super_getattro).<br>
><br>
> So, the 'type' argument of __get__ does not give more information<br>
> about the 'real calling type' in this case.<br>
> It seems that this is just a redundant information of inst.__class__.<br>
><br>
> For example:<br>
><br>
>     # A.descr is a descriptor<br>
>     # B inherit from A<br>
>     # C inherit from B<br>
><br>
>         c = C()<br>
>         c.descr<br>
>         super(C, c).descr<br>
>         super(B, c).descr<br>
><br>
> In these 3 cases the __get__ method is called with the same arguments<br>
> that are : __get__(descr, c, C).<br>
><br>
> If this behavior is really expected: Could you explain why ? because<br>
> it means that I am missing something obvious.<br>
> Because, at first sight, the 'type' argument seems to be the perfect<br>
> place to get the type of the 'real calling class'.</p>
<p dir="ltr">The third argument is just there to handle the case where the instance is None (i.e. lookup directly on the class rather than an instance).</p>
<p dir="ltr">Cheers,<br>
Nick.</p>
<p dir="ltr">><br>
> Thank you,<br>
><br>
> --<br>
> hakril<br>
> _______________________________________________<br>
> Python-Dev mailing list<br>
> <a href="mailto:Python-Dev@python.org">Python-Dev@python.org</a><br>
> <a href="https://mail.python.org/mailman/listinfo/python-dev">https://mail.python.org/mailman/listinfo/python-dev</a><br>
> Unsubscribe: <a href="https://mail.python.org/mailman/options/python-dev/ncoghlan%40gmail.com">https://mail.python.org/mailman/options/python-dev/ncoghlan%40gmail.com</a><br>
</p>