擅长:python、mysql、java
<p>是的,但你可能不想这么做,因为这是个坏主意。你必须检查解释器堆栈。由于明显的原因,如果从C调用您的代码,这将不起作用。下面是代码:</p>
<pre><code>import inspect
import dis
class A(object):
def __add__(self, other):
fr = inspect.getouterframes(
inspect.currentframe(), 1)[1][0]
opcode = fr.f_code.co_code[fr.f_lasti]
# opcode = ord(opcode) # Uncomment for Python 2
is_op = opcode == dis.opmap['BINARY_ADD']
if is_op:
print('Called with +')
else:
print('Called with __add__')
A() + 1
A().__add__(1)
</code></pre>
<p>这是在python3上测试和工作的,只需要对python2稍作修改。在</p>