No código abaixo, porque temos que adicionar os estados manualmente toda vez que o contrato avança? Não há maneiras de trabalhar apenas com a classe Contrato? Não faz sentido ter que manipular as duas instâncias paralelamente, pois se esquecer de adicionar o estado, o histórico ficaria inconsistente.
if name == 'main':
historico = Historico()
contrato = Contrato(nome='Flávio Almeida')
contrato.avanca()
historico.adiciona_estado(contrato.salva_estado())
contrato.avanca()
historico.adiciona_estado(contrato.salva_estado())
contrato.avanca()
historico.adiciona_estado(contrato.salva_estado())