<p><a href="https://docs.python.org/3/reference/datamodel.html#object.__bool__" rel="noreferrer">^{<cd1>}</a>的文档指出,调用此方法进行真值测试,如果未定义该方法,则对<a href="https://docs.python.org/3/reference/datamodel.html#object.__len__" rel="noreferrer">^{<cd2>}</a>求值:</p>
<blockquote>
<p>Called to implement truth value testing and the built-in operation bool(); [...] When this method is not defined, <code>__len__()</code> is called, if it is defined, and the object is considered true if its result is nonzero. If a class defines neither <code>__len__()</code> nor <code>__bool__()</code>, all its instances are considered true.</p>
</blockquote>
<p>这适用于任何Python对象。如我们所见,<code>set</code>没有定义方法<code>__bool__</code>:</p>
<pre><code>>>> set.__bool__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'set' has no attribute '__bool__'
</code></pre>
<p>因此,真实性检验取决于<code>__len__</code>:</p>
^{pr2}$
<p>因此,只有空集(零长度)被认为是错误的。在</p>
<p>文档中<a href="https://docs.python.org/3/library/stdtypes.html#truth-value-testing" rel="noreferrer">truth value testing</a>的部分在这方面不完整。在</p>