擅长:python、mysql、java
<p>这个super是python3super的一个重新实现,但是不要期望它像python3super那样高效。在</p>
<p>在python3中,编译器作弊,每当它看到函数中引用的名称<code>super</code>,它就会自动向函数添加一个名为<code>__class__</code>的单元变量。<code>super</code>函数使用<code>__class__</code>来弥补没有传递给它的参数。您可以通过执行以下操作来看到这一点:</p>
<pre><code>class X:
def f(self):
super
return __class__
assert X().f() is X
assert X.f.__closure__[0].cell_contents is X
</code></pre>
<p><code>__class__</code>只定义一次(当函数第一次编译时)+,因此super的查找非常快速。在</p>
<p>另一方面,每次都需要深入MRO(和任何decorator),以确定{<cd7>}的类型和定义函数的类型。<strong>它似乎很适合后移植python3</strong>(可能是它存在于<code>future.builtins</code>中的原因)。<strong>但是您应该坚持使用标准的python2</strong><code>super</code><strong>,因此阅读您代码的人对此并不感到惊讶。</strong></p>
<p>实现:(取自<a href="https://github.com/rfk/magicsuper/blob/master/magicsuper/_super.py" rel="nofollow noreferrer">https://github.com/rfk/magicsuper/blob/master/magicsuper/_super.py</a>(由<code>future.builtins.newsuper</code>记录)</p>
^{pr2}$