On 4/25/07, <b class="gmail_sendername">Jim Jewett</b> &lt;<a href="mailto:jimjjewett@gmail.com">jimjjewett@gmail.com</a>&gt; wrote:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On 4/25/07, Emin.shopper Martinian.shopper &lt;<a href="mailto:emin.shopper@gmail.com">emin.shopper@gmail.com</a>&gt; wrote:<br><br>&gt; I think a bigger issue is whether to check at definition time or check at<br>&gt; instantiation time. It seems to me the former has the benefit of catching
<br>&gt; errors earlier and potentially saving time. I don&#39;t immediately see the<br>&gt; advantage of the latter (probably that is due to my lack of imagination).<br><br>The advantage of waiting is that you can *have* (partially) abstract
<br>classes.&nbsp;&nbsp;So long as you never instantiate them directly (super calls<br>are OK), everything is fine.</blockquote><div><br>Good point. However, you can do this without precluding def time checks. For example, you can have any class which has abstract methods not be forced to satisfy parent ABC rules since it is still abstract, or you can provide another way to mark the class as partially abstract (my initial implemenation does this by having the partially abstract class inherit from both the parent abstract class and the class that all abstract classes inherit from). 
<br><br>You could reasonably argue that the benefit of def time enforcement is outweighed by the need to do something special for a class that inherits from an abstract base class but has no abstract methods itself. <br></div>
<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">If you want an earlier check, then just create an instance of your<br>class at import time (or, alternatively, in your unit tests).&nbsp;&nbsp;If it
<br>can be created, it passed the test.</blockquote><div><br>Yes, I could do that assuming that the inputs to the class __init__ method can be constructed quickly. Personally, I would find it preferable to have to do something slightly different for partially abstract classes with no abstract methods, but I guess it&#39;s a matter of taste.
<br>&nbsp;<br>-Emin<br></div><br></div><br>