<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Feb 12, 2015 at 7:41 PM, Ethan Furman <span dir="ltr"><<a href="mailto:ethan@stoneleaf.us" target="_blank">ethan@stoneleaf.us</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 02/12/2015 06:39 PM, Alexander Belopolsky wrote:<br>
<br>
> In my view, a constructor is no different from any other method.  If the designers of the subclass decided to change the<br>
> signature in an incompatible way, they should either override all methods that create new objects or live with tracebacks.<br>
<br>
> On the other hand, if all I want in my Date class is a better __format__ method, I am forced to override all operators<br>
</span>> or have my objects silently degrade [...]<br>
<br>
So there are basically two choices:<br>
<br>
1) always use the type of the most-base class when creating new instances<br>
<br>
   pros:<br>
     - easy<br>
     - speedy code<br>
     - no possible tracebacks on new object instantiation<br>
<br>
   cons:<br>
     - a subclass that needs/wants to maintain itself must override all<br>
       methods that create new instances, even if the only change is to<br>
       the type of object returned<br>
<br>
2) always use the type of self when creating new instances<br>
<br>
   pros:<br>
     - subclasses automatically maintain type<br>
     - much less code in the simple cases [1]<br>
<br>
   cons:<br>
     - if constructor signatures change, must override all methods which<br>
       create new objects<br>
<br>
Unless there are powerful reasons against number 2 (such as performance, or the effort to affect the change), it sure<br>
seems like the nicer way to go.<br>
<br>
So back to my original question: what other concerns are there, and has anybody done any benchmarks?<br></blockquote></div><br></div><div class="gmail_extra">Con for #2 is a showstopper. Forget about it.<br clear="all"></div><div class="gmail_extra"><br>-- <br><div class="gmail_signature">--Guido van Rossum (<a href="http://python.org/~guido">python.org/~guido</a>)</div>
</div></div>