Я играю с numpy и копаю документацию, и я наткнулся на какую-то магию. А именно я говорю о numpy.where():
>>> x = np.arange(9.).reshape(3, 3)
>>> np.where( x > 5 )
(array([2, 2, 2]), array([0, 1, 2]))
Как они достигают внутри, что вы можете передать что-то вроде x > 5 в метод? Я думаю, что это имеет какое-то отношение к __gt__, но я ищу подробное объяснение.