keys = pygame.key.get_pressed()
player.update(keys)
# обновление спрайтов
all_sprites.update()
ну вот тут вы обновите Player дважды. Один раз напрямую вызвав player.update, а второй раз через массив спрайтов, в котором Player тоже есть.
Т.е. это в принципе странно и выглядит как ошибка в логике.
А основная ошибка в том, что у вас Player это наследник спрайта, и переопределеяет у него метод Update.
Быстрый выход - изменить название метода у игрока. Правильный - подумать над архитектуролй