擅长:python、mysql、java
<p>想想如果是:</p>
<pre><code>class RectangularRoom(object):
def __init__(self, width, height):
pass
def cleanTileAtPosition(self, pos):
pass
def isTileCleaned(self, m, n):
pass
</code></pre>
<p>你给它子类化,却忘了告诉它如何<code>isTileCleaned()</code>,或者更可能的是,把它打成<code>isTileCLeaned()</code>。然后在您的代码中,当您调用它时,您将得到一个<code>None</code>。</p>
<ul>
<li>你能得到你想要的重写函数吗?当然不是。</li>
<li><code>None</code>输出是否有效?谁知道呢。</li>
<li>这是故意的行为吗?几乎肯定不是。</li>
<li>你会出错吗?这要看情况。</li>
</ul>
<p><code>raise NotImplmentedError</code><em>强制</em>您实现它,因为它会在您尝试运行它时抛出异常,直到您这样做为止。这消除了许多无声的错误。这类似于为什么a <a href="https://docs.python.org/2/howto/doanddont.html#except" rel="noreferrer">bare except is almost never a good idea</a>:因为人们会犯错误,这确保了他们不会被扫地出门。</p>
<p>注意:如其他答案所述,使用抽象基类更好,因为这样错误会被前加载,并且程序在您实现它们之前不会运行(对于NotImplementedError,只有在实际调用时才会抛出异常)。</p>