Olá, Victor! Como vai?
No exemplo que você mencionou, onde você está trabalhando com herança, é necessário importar a classe mãe para que a classe filha possa herdar seus atributos e métodos. Nesse caso, você pode utilizar a forma from programa import Programa, onde "programa" é o nome do arquivo onde a classe Programa está definida.
No entanto, é importante lembrar que essa é apenas uma forma de importar uma classe. Existem outras formas, como importar o módulo inteiro utilizando import programa e então acessar a classe utilizando programa.Programa. A escolha da forma de importação vai depender da estrutura do seu código e da sua preferência pessoal.
Agora, em relação ao problema que você mencionou sobre a herança não funcionar quando você tentou chamar a classe filha pela herança (class Filme(Programa)), é possível que o erro esteja relacionado à forma como você está definindo os atributos na classe filha. Certifique-se de que você está utilizando o mesmo nome de atributo e os mesmos parâmetros no método __init__ da classe filha.
Por exemplo, na classe Filme, você deve ter um método __init__ que recebe os mesmos parâmetros (nome, ano, duracao) e atribui esses valores aos atributos da classe filha. Além disso, é importante que você chame o método __init__ da classe mãe utilizando super().__init__(...) para que os atributos da classe mãe sejam inicializados corretamente.
Aqui está um exemplo de como ficaria a definição da classe Filme corrigida:
class Filme(Programa):
def __init__(self, nome, ano, duracao):
super().__init__(nome, ano) # chamando o __init__ da classe mãe
self.duracao = duracao
self.__likes = 0
Dessa forma, a classe Filme irá herdar os atributos da classe Programa e também terá seus próprios atributos.
Espero ter esclarecido sua dúvida!
Se tiver mais alguma pergunta, é só me dizer.
Abraços e bons estudos!