Ваша реализация достойна, но может быть улучшена с помощью ответа @cdlane.
Этот ответ направлен на использование единой точки выхода. Хотя это может быть более читаемым, чем ответ cdlane. Это более сложный и, вероятно, менее обслуживаемый ответ, чем ответ cdlane, и вместо этого вы должны использовать его / ее ответ. Но вот как может выглядеть разовая отдача.
def jump_to(self, position_piece, target_position):
middle_position = Position((position_piece.line + target_position.line)/2,
(position_piece.column + target_position.column)/2)
return (position_piece in self.cases
and (not target_position in self.cases
or (target_position in position_piece.four_position_jumps()
and self.cases[position_piece] != self.cases[middle_position])))