Sua abordagem é apenas uma aplicação do padrão de comando , não específico para Python, e bem conhecido pela implementação de desfazer funcionalidade. Google para "comando padrão desfazer" para encontrar exemplos, mesmo os pequenos que não são excessivamente complicados.
E sim, se você fizer isso corretamente, poderá implementar a funcionalidade desfazer dessa maneira. Se for fácil ou difícil de implementar, depende muito do tipo de ações que você terá e da quantidade de dados a processar. Em teoria, antes de aplicar uma ação, você pode salvar todo o estado de seus dados e redefinir para esse estado sempre que quiser "desfazer". Isso tornará possível implementar seu desfazer de maneira simples e genérica, sem a necessidade de operações de "desfazer" individuais. No entanto, se você tiver uma quantidade enorme de dados para processar e desejar uma grande desfazer, essa abordagem geralmente não é viável devido a restrições de memória. Se essa é a sua situação, um salvamento específico dos dados modificados e uma implementação de "desfazer" correspondente podem ser muito mais eficientes, mas somente se você tiver muitas ações "pequenas" a serem processadas, o que permitirá essa otimização.
Outros pontos importantes:
- você espera que as Ações paralelas sejam aplicadas aos dados, por vários segmentos ou processos ou usuários? Isso pode dificultar muito a implementação do "undo".
- você espera ações nas quais não é possível prever qual parte de seus dados será alterada? Nesse caso, você precisará de uma abordagem "salvar tudo" para essas ações, o que pode ou não ser um problema, veja acima.