如何在后台检测Python进行的方法调用?

时间:2018-08-06 06:23:59

标签: python

特别是,我想查看特定代码行正在调用哪种魔术方法。

例如,我知道1 + 2实际上呼叫(1).__add__(2),而[1,2,3][0]呼叫[1,2,3].__getitem__(0)

我想知道哪些魔术方法可用于其他操作,而不必在线查找。

1 个答案:

答案 0 :(得分:9)

没有一个很好的方法来检查它。您可能应该只是查找一下。

在实现中(特定于CPython),1 + 2[1, 2, 3][0]实际上根本不会通过__add____getitem__方法;他们将经历C级挂钩,并完全跳过方法。即使他们经历了这些方法,也都将在C级代码中发生,您无法使用PDB进行调试,也无法做很多检查工作。

与您所需要的精神最接近的是

>>> import unittest.mock
>>> unittest.mock.MagicMock() + 3
<MagicMock name='mock.__add__()' id='140290799397408'>

所以,嘿! +使用__add__。您可以运行该命令来查看为+调用了什么魔术方法。不过,它实际上并不涉及检查+中涉及的魔术方法。 MagicMock刚刚已经编写了大多数标准魔术方法的实现。