擅长:python、mysql、java
<p>这部分文档写得不好,或者更确切地说,维护不善。以下条款:</p>
<blockquote>
<p>instances of user-defined classes, if the class defines a <code>__bool__()</code> or <code>__len__()</code> method, when that method returns the integer zero or bool value False.</p>
</blockquote>
<p>真正适用于<em>所有</em>类,无论是否用户定义,包括<code>set</code>,<code>dict</code>,甚至所有其他子句中列出的类型(所有这些子句都定义<code>__bool__</code>或{<cd4>})。(在Python2中,<code>None</code>是错误的,尽管没有<code>__len__</code>或python2的<code>__bool__</code>的等价物,但该异常是<a href="http://bugs.python.org/issue12647" rel="nofollow noreferrer">gone since Python 3.3</a>。)</p>
<p>我说维护得不好是因为这个部分至少从<a href="https://docs.python.org/release/1.4/lib/node5.html#SECTION00311000000000000000" rel="nofollow noreferrer">Python 1.4</a>开始就几乎没有变化,也许更早。它的更新是为了添加<code>False</code>和删除单独的int/long类型,但不是为了类型/类的统一或集合的引入。在</p>
<p>在编写quoted子句时,用户定义的类和内置类型的行为确实不同,我不认为内置类型在当时实际上没有<code>__bool__</code>或{<cd4>}。在</p>