特别是,我想查看特定代码行正在调用哪种魔术方法。
例如,我知道1 + 2
实际上呼叫(1).__add__(2)
,而[1,2,3][0]
呼叫[1,2,3].__getitem__(0)
。
我想知道哪些魔术方法可用于其他操作,而不必在线查找。
答案 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
刚刚已经编写了大多数标准魔术方法的实现。