<div dir="ltr">In any case I find this PEP great. If we can implement a library like traitlets only using these new hooks without a custom metaclass, it will be a big improvement.<div><br></div><div>My only concern was that calling the hook __set_name__ was misleading while it could not set the name at all and do pretty much anything else.</div><div><br></div><div>Regards,</div><div>Sylvain</div><div><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 21, 2016 at 4:53 AM, Nick Coghlan <span dir="ltr"><<a href="mailto:ncoghlan@gmail.com" target="_blank">ncoghlan@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 21 July 2016 at 03:40, Sylvain Corlay <<a href="mailto:sylvain.corlay@gmail.com">sylvain.corlay@gmail.com</a>> wrote:<br>
> My point is that in any real-world implementation of traits, __set_name__<br>
> will do a lot more than setting the name, which makes the name misleading.<br>
<br>
</span>I suspect the point of disagreement on that front may be in how we<br>
view the names of the existing __get__, __set__ and __delete__ methods<br>
in the descriptor protocols - all 3 of those are in the form of event<br>
notifications to the descriptor to say "someone is getting the<br>
attribute", "someone is setting the attribute" and "someone is<br>
deleting the attribute". What the descriptor does in response to those<br>
notifications is up to the descriptor, with it being *conventional*<br>
that they be at least plausibly associated with the "obj.attr",<br>
"obj.attr = value" and "del obj.attr" operations (with folks voting by<br>
usage as to whether or not they consider a particular API's side<br>
effects in response to those notifications reasonable).<br>
<br>
The new notification is merely "someone is setting the name of the<br>
attribute", with that taking place when the contents of a class<br>
namespace are converted into class attributes.<br>
<br>
However, phrasing it that way suggest that it's possible we *did* miss<br>
something in the PEP: we haven't specified whether or not __set_name__<br>
should be called when someone does someone does "cls.attr = descr".<br>
Given the name, I think we *should* call it in that case, and then the<br>
semantics during class creation are approximately what would happen if<br>
we actually built up the class attributes as:<br>
<br>
    for attr, value in cls_ns.items():<br>
        setattr(cls, attr, value)<br>
<br>
Regards,<br>
<div class="HOEnZb"><div class="h5">Nick.<br>
<br>
--<br>
Nick Coghlan   |   <a href="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</a>   |   Brisbane, Australia<br>
</div></div></blockquote></div><br></div>