Python - Knight's tour recursive function
I don't have much to say about this, only a few small nitpicks.


self.height might be a better name, (width and height) make more sense to me. But this might be subjective.
At is_ligit_move() you could use, elem in range(), because range is special. See this excellent description by @Graipher for more details.
At available_moves you could use list comprehension instead of the res variable


So your res would be this:

return [elem for elem in possible_moves if self.is_legit_move(elem)]

It does the same but looks a little cleaner. See PEP202 for more information.



Overall I think you have crafted a nice piece of code!