擅长:python、mysql、java
<p>在类和基类中没有三个单独的搜索。(而且,它不仅仅是类和它的基;它是整个MRO。)在MRO中有一个搜索,它一找到什么就停止,不管找到的对象可能支持或不支持描述符协议的哪些部分。你知道吗</p>
<p>当对<code>b.dd_1</code>的搜索找到<code>'dd_1 in B'</code>时,它停止MRO搜索。它不会因为<code>'dd_1 in B'</code>不是一个描述符就一直寻找。你知道吗</p>
<p>以下是标准属性解析逻辑的正确版本,在<code>object.__getattribute__</code>中实现。(这只是<code>object.__getattribute__</code>;它不包括具有自己的<code>__getattribute__</code>或<code>__getattr__</code>的类。)</p>
<ol>
<li>在对象的MRO中搜索与属性名匹配的dict条目。你知道吗</li>
<li>如果MRO搜索找到一个带有<code>__get__</code>方法的数据描述符,停止搜索并使用该描述符。你知道吗</li>
<li>否则,我们检查实例dict。如果有与属性名匹配的条目,请停止并使用该条目。如果没有匹配的条目(或者没有实例dict),请继续。你知道吗</li>
<li>如果第2步搜索找到非数据描述符或非描述符,请使用该描述符。你知道吗</li>
<li>否则,查找失败。引发AttributeError。你知道吗</li>
</ol>