I haven't looked through your code but this:
"""He finds the best move for the first leave, which is indeed G8.
And the algorithm keeps this move as his best through the entire algorithm."""
seems to describe a greedy algorithm, which MINIMAX with alpha-beta pruning is not.

Also, how do you decide that the algorithm does not find the "best" move? It doesn't find the best move based on your knowledge of chess or it doesn't find the optimal move based on your scoring function?