<br><br><div class="gmail_quote">On 7 April 2011 12:48, Nick Coghlan <span dir="ltr"><<a href="mailto:ncoghlan@gmail.com">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;">
<div class="im">On Thu, Apr 7, 2011 at 7:17 PM, Antoine Pitrou <<a href="mailto:solipsis@pitrou.net">solipsis@pitrou.net</a>> wrote:<br>
>> Perhaps the IOError constructor could be made to switch<br>
>> the class of the generated object based on the errno<br>
>> attribute passed to the constructor.<br>
><br>
> Nice suggestion. I'll try to see if that is possible.<br>
<br>
</div>It should be possible with appropriate fancy footwork in __new__. You<br>
do need to be careful to avoid calling __init__ on the created object<br>
twice.<br>
<br>
I know I've read an example that demonstrates the principle, but I<br>
unfortunately don't remember where (I initially thought it was in<br>
Guido's new-style class essay, but I checked and that wasn't it)<br></blockquote><div><br></div><div><br></div><div>__init__ is called for you on construction so long as the object returned by __new__ is an instance of the type being constructed or a subclass.</div>
<div><br></div><div>So if what you want __new__ to return *is* a subclass, then you create it with subclass.__new__(...) and not subclass(...) (the latter would call __init__ which would then be called again after __new__ returns).</div>
<div><br></div><div>If what you're returning *isn't* a subclass (which is best avoided anyway) then you can construct it with otherclass(...) as __init__ won't be called for you.</div><div><br></div><div>All the best,</div>
<div><br></div><div>Michael Foord</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Cheers,<br>
Nick.<br>
<font color="#888888"><br>
--<br>
Nick Coghlan   |   <a href="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</a>   |   Brisbane, Australia<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org">Python-ideas@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/python-ideas" target="_blank">http://mail.python.org/mailman/listinfo/python-ideas</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><pre cols="72"><a href="http://www.voidspace.org.uk/" target="_blank">http://www.voidspace.org.uk/</a><br><br>May you do good and not evil<br>May you find forgiveness for yourself and forgive others<br>
May you share freely, never taking more than you give.<br>-- the sqlite blessing <a href="http://www.sqlite.org/different.html" target="_blank">http://www.sqlite.org/different.html</a></pre>
<br>