擅长:python、mysql、java
<p>在cpython中,通过分解referer框架,您有一些自省的能力。例如:</p>
<pre><code>import dis
import inspect
def method_how_created():
return dis.dis(inspect.currentframe().f_back.f_back.f_code)
class MyAdder(object):
def __add__(self, other):
print method_how_created()
x = MyAdder()
</code></pre>
<p>检查大小写<code>x + 7</code>,您将在反汇编中看到如下内容:</p>
^{pr2}$
<p>使用魔术方法<code>x.__add__(7)</code>,您将在反汇编中看到如下内容:</p>
<pre><code> 64 LOAD_NAME 5 (x)
67 LOAD_ATTR 6 (__add__)
70 LOAD_CONST 5 (7)
73 CALL_FUNCTION 1
76 POP_TOP
77 LOAD_CONST 1 (None)
80 RETURN_VALUE
</code></pre>