<br><br><div class="gmail_quote">On Sun, Apr 5, 2009 at 3:54 PM, Nick Coghlan <span dir="ltr">&lt;<a href="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">Antoine Pitrou wrote:<br>
&gt; James Y Knight &lt;foom &lt;at&gt; <a href="http://fuhm.net" target="_blank">fuhm.net</a>&gt; writes:<br>
&gt;&gt; It seems that a separate method &quot;_internal_close&quot; should&#39;ve been<br>
&gt;&gt; defined to do the actual closing of the file, and the close() method<br>
&gt;&gt; should&#39;ve been defined on the base class as &quot;self.flush();<br>
&gt;&gt; self._internal_close()&quot; and never overridden.<br>
&gt;<br>
&gt; I&#39;m completely open to changes as long as there is a reasonable consensus around<br>
&gt; them. Your proposal looks sane, although the fact that a semi-private method<br>
&gt; (starting with an underscore) is designed to be overriden in some classes is a<br>
&gt; bit annoying.<br>
<br>
</div>Note that we already do that in a couple of places where it makes sense<br>
- in those cases the underscore is there to tell *clients* of the class<br>
&quot;don&#39;t call this directly&quot;, but it is still explicitly documented as<br>
part of the subclassing API.<br>
<br>
(the only example I can find at the moment is in asynchat, but I thought<br>
there were a couple of more common ones than that - hopefully I&#39;ll think<br>
of them later)<br></blockquote></div><br><div>Queue.Queue in 2.* (and queue.Queue in 3.*) is like that too -- the single leading underscore meaning &quot;protected&quot; (&quot;I&#39;m here for subclasses to override me, only&quot; in C++ parlance) and a great way to denote &quot;hook methods&quot; in a Template Method design pattern instance.  Base class deals with all locking issues in e.g. &#39;get&#39; (the method a client calls), subclass can override _get and not worry about threading (it will be called by parent class&#39;s get with proper locks held and locks will be properly released &amp;c afterwards).</div>
<div><br></div><div><br></div><div>Alex</div>