擅长:python、mysql、java
<p>特殊方法是在类上查找的,而不是在实例上查找的-不像常规方法那样首先在实例上查找。请参见Python数据模型文档中的<a href="http://docs.python.org/reference/datamodel.html#special-method-lookup-for-new-style-classes">Special method lookup</a>。在</p>
<p>将<code>Class</code>看作<code>type</code>的实例,这意味着</p>
<pre><code>Class.getitem(test)
</code></pre>
<p>它首先查找您告诉它的内容:<code>Class</code>自身属性中名为<code>getitem</code>的方法。但是,当你使用</p>
^{pr2}$
<p>它跳过这个,直接转到<code>type</code>(是<code>Class</code>的类,或者它的元类),因此调用<code>type.__getitem__(Class, test)</code>。所以,<code>__getitem__</code>得到了<code>type</code>作为它的第一个参数(它仍然会得到<code>Class</code>,如果你显式地<code>Class.__getitem__(test)</code>,它仍然会得到{<cd1>}),而是Python在本例中寻找的<code>__getitem__</code>并不存在。要使其存在,您需要为将其定义为实例方法的<code>Class</code>定义自己的元类,而不是在<code>Class</code>上将其定义为类方法。在</p>