Olá, Rafael! Tudo bem? =)
O método imprime é criado na classe mãe para informarmos que as característica que ele possui são herdadas da classe mãe.
Neste caso é da classe Programa que recebemos vários comportamentos existentes nas classes filhas, observe que isso também acontece com o que foi definido no nosso __ init __().
Nós definimos as características dele na classe mãe e herdamos elas nas classes filhas, a criação do mesmo na classe mãe é necessária por isso, ela não é obrigatória, mas deste modo tornamos o nosso código mais pythonico e evitamos o retrabalho nos livrando de reescrever o mesmo código várias vezes.
Espero ter ajudado com sua dúvida.
Continue praticando.
Até mais!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!