<p><strong>一个类是否有可能没有一个\uu dict\uuu属性?</strong>我对这个问题的最初反应是否定的。这可能不是您所要求的,因为如果一个类的实例定义了<code>__slots__</code>,并且没有从已经存在<code>__dict__</code>的类继承,那么这个类的实例就可以不带<code>__dict__</code>。请参见<a href="http://docs.python.org/2/reference/datamodel.html" rel="nofollow noreferrer">Python Data Model description</a>中的<code>__slots__</code>说明</p>
<p><strong>编辑</strong>:</p>
<blockquote>
<p>as pointed out by @nneonneo, comments below about the double underscore are not correct becuase there are trailing underscores. The content is left in for historical reasons.</p>
</blockquote>
<p>你所说的行为看起来很奇怪,我觉得很自然。@Owen询问了期望不同的代码是正确的,并感谢您发布了对<a href="https://github.com/Yelp/Testify" rel="nofollow noreferrer">Yelp/Testify</a>的引用。该框架广泛使用了双下划线。在</p>
<p>Alex Martelli的<a href="https://stackoverflow.com/questions/1301346/the-meaning-of-a-single-and-a-double-underscore-before-an-object-name-in-python">SO answer on the double_underscore</a>有助于阐明可能发生的事情,但最简单的答案是双下划线返回上面的结果,因为<code>InheritingTest.__test__</code>的点号符号通过常规的属性解析机制,但通过决定使用前导的双下划线,profice框架,保留了在类作用域访问它的权限,即使子类重写了它。在</p>
<p>从本质上讲,测试框架是神奇的野兽,<code>__test__</code>hear的使用在他们看来是恰当的。我查看了他们的文档,文档感觉很稀疏,所以使用<code>__test__</code>的</em>根本感觉很危险(不管怎样,双下划线类型的信号都不会影响这个“class local”变量)。在</p>