🎉 SEMANA DO CONSUMIDOR

Últimos dias para comprar os cursos com 50% de desconto

Ver detalhes

Postado em em 7 de novembro de 2024

Você sabe o que é super em Python? Sabe como ele funciona? Aprenda detalhadamente o que é o super no Python e como utilizá-lo em seus códigos!

Se quiser pode acompanhar esse conteúdo em formato de vídeo ou pode acessar o nosso Canal do YouTube para mais vídeos!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Não vamos te encaminhar nenhum tipo de SPAM! A Hashtag Treinamentos é uma empresa preocupada com a proteção de seus dados e realiza o tratamento de acordo com a Lei Geral de Proteção de Dados (Lei n. 13.709/18). Qualquer dúvida, nos contate.

O que é Super em Python – Explicação Detalhada

A palavra super em Python não se refere a super-heróis, mas sim ao conceito de programação orientada a objetos, essencial para quem deseja desenvolver sites ou sistemas complexos!

Na aula de hoje, vou te mostrar de forma detalhada e prática como essa palavra funciona dentro do contexto das classes em Python.

Essa palavra-chave está relacionada ao conceito de herança, que permite que classes compartilhem atributos e métodos. É extremamente útil para criar hierarquias de classes onde uma classe “mãe” fornece atributos e métodos para outras classes.

Super, Programação Orientada a Objetos e Herança de Classes

A programação orientada a objetos (POO) em Python nos permite organizar o código em classes, que representam objetos.

Dentro dela, um dos principais conceitos é a herança de classes, que possibilita que classes filhas (subclasses) herdem características de uma classe mãe (superclasse).

Neste contexto, o uso do termo super é essencial para otimizar o código, permitindo que a subclasse acesse as funcionalidades da superclasse sem a necessidade de reescrever toda a lógica comum a elas.

Isso reduz a repetição de código e facilita sua manutenção.

Caso você ainda não esteja muito familiarizado com o conceito de Classes e Programação Orientada a Objetos no Python, recomendo que acompanhe essas duas aulas primeiro:

Usando Super com um Exemplo Prático – Sistema do Netflix

Vamos visualizar um exemplo prático para te ajudar a compreender o uso do super. Imagine que você está criando um sistema de streaming, como o da Netflix.

Dentro desse sistema precisamos definir diferentes tipos de conteúdo, como séries e filmes.

Ambos possuem atributos similares, como título, descrição e trailer, e também métodos compartilhados, como exibir a descrição e exibir o diretor.

Porém, além dessas características compartilhadas, eles possuem características próprias; por exemplo, as séries têm número de episódios, enquanto os filmes não.

Para representar essa estrutura, podemos criar uma superclasse chamada Programa e duas subclasses que herdarão dela, chamadas Serie e Filme.

Na superclasse Programa, definiremos os atributos e métodos comuns a todo o conteúdo do sistema. Faremos isso utilizando a função __init__ e a palavra-chave self.

class Programa():
    def __init__(self, titulo, descricao, trailer):
        self.titulo = titulo
        self.descricao = descricao
        self.trailer = trailer

    def exibir_descricao(self):
        print("Descrição:", self.descricao)

    def exibir_diretor(self):
        print("Diretor: Steven Spielberg")

A partir dessa estrutura, qualquer conteúdo que herdar de Programa terá os atributos titulo, descricao e trailer, e acesso aos métodos exibir_descricao e exibir_diretor.

Subclasses Série e Filme

Com a superclasse criada, podemos definir as subclasses Serie e Filme. Ao criar uma classe filha de outra, precisamos, no momento da definição da classe, passar entre parênteses o nome da superclasse.

Essa sintaxe class Subclasse(Superclasse) é a forma de definir que a nova classe “estende” ou “herda” os comportamentos de outra.

Dessa forma, qualquer método ou atributo que exista em Programa estará automaticamente disponível para Serie e Filme, a menos que você modifique algum desses métodos.

Para definir as subclasses Serie e Filme, faremos da seguinte forma:

class Programa():
    def __init__(self, titulo, descricao, trailer):
        self.titulo = titulo
        self.descricao = descricao
        self.trailer = trailer

    def exibir_descricao(self):
        print("Descrição:", self.descricao)

    def exibir_diretor(self):
        print("Diretor: Steven Spielberg")

class Serie(Programa):
    pass

class Filme(Programa):
    pass

A partir disso, podemos criar instâncias das classes Serie e Filme e acessar os atributos e métodos definidos dentro da classe Programa.

round6 = Serie("Round6", "Serie de Jogos entre pessoas reais", "trailer_round6.mp4")
nao_olhe_para_cima = Filme("Não olhe para cima", "Filme de meteoros e fim do mundo", "trailer_nao_olhe.mp4")

print(round6.titulo)
round6.exibir_descricao()
print("-----------------------")
print(nao_olhe_para_cima.titulo)
nao_olhe_para_cima.exibir_descricao()
Criando subclasses

Utilizando o super para Métodos Personalizados

Agora, suponha que, além da descrição detalhada, para as séries, desejamos incluir o número de episódios, algo que não seria necessário para os filmes.

Para isso, podemos redefinir o método exibir_descricao na subclasse Serie, aproveitando a lógica já criada em Programa.

Primeiro, vamos definir o método exibir_descricao dentro da classe Serie. Em seguida, vamos adicionar um print com a mensagem “Tem 10 episódios”. Por fim, usaremos o super() para chamar o método exibir_descricao criado na classe Programa.

class Programa():
    def __init__(self, titulo, descricao, trailer):
        self.titulo = titulo
        self.descricao = descricao
        self.trailer = trailer

    def exibir_descricao(self):
        print("Descrição:", self.descricao)

    def exibir_diretor(self):
        print("Diretor: Steven Spielberg")

class Serie(Programa):
    def exibir_descricao(self):
        print("Tem 10 episódios")
        super().exibir_descricao()

class Filme(Programa):
    pass

Ao usar super().exibir_descricao(), você permite que Serie personalize a exibição da descrição, mas ainda reutilize o método da superclasse.

Criando as nossas instâncias agora, teremos uma mensagem diferente sendo exibida para a série “Round6” quando chamarmos o método exibir_descricao().

round6 = Serie("Round6", "Serie de Jogos entre pessoas reais", "trailer_round6.mp4")
nao_olhe_para_cima = Filme("Não olhe para cima", "Filme de meteoros e fim do mundo", "trailer_nao_olhe.mp4")

print(round6.titulo)
round6.exibir_descricao()
print("-----------------------")
print(nao_olhe_para_cima.titulo)
nao_olhe_para_cima.exibir_descricao()
Utilizando o super para Métodos Personalizados

Utilizando o super para Atributos Personalizados

Outro uso interessante do super() é adicionar um atributo personalizado a uma subclasse específica. Vamos criar, por exemplo, um atributo referente ao número de episódios na classe Serie.

Para isso, definiremos o método __init__ dentro dessa classe. Nele, usaremos super().__init__(titulo, descricao, trailer) para que Serie inicialize corretamente os atributos herdados de Programa.

Em seguida, podemos adicionar o atributo episodios diretamente na subclasse. Esse atributo será exclusivo para as instâncias de Serie e não afetará as instâncias de Programa ou Filme.

class Programa():
    def __init__(self, titulo, descricao, trailer):
        self.titulo = titulo
        self.descricao = descricao
        self.trailer = trailer

    def exibir_descricao(self):
        print("Descrição:", self.descricao)

    def exibir_diretor(self):
        print("Diretor: Steven Spielberg")

class Serie(Programa):
    def __init__(self, titulo, descricao, trailer, episodios):
        super().__init__(titulo, descricao, trailer)
        self.episodios = episodios

    def exibir_descricao(self):
        print(f"Tem {self.episodios} episódios")
        super().exibir_descricao()

class Filme(Programa):
    pass

Dessa forma, o número de episódios será definido no momento de criação da instância da classe Serie, e o método exibir_descricao retornará o número adequado para cada série.

round6 = Serie("Round6", "Serie de Jogos entre pessoas reais", "trailer_round6.mp4", 12)
nao_olhe_para_cima = Filme("Não olhe para cima", "Filme de meteoros e fim do mundo", "trailer_nao_olhe.mp4")

print(round6.titulo)
round6.exibir_descricao()
print("-----------------------")
print(nao_olhe_para_cima.titulo)
nao_olhe_para_cima.exibir_descricao()
Utilizando o super para Atributos Personalizados

Vantagens do super

Como vimos, uma boa prática ao trabalhar com herança em Python é utilizar a função super(), que permite chamar métodos da superclasse de forma segura e eficiente. Algumas vantagens de seu uso incluem:

  • Redução de Código: Evita duplicidade de código ao reutilizar métodos da superclasse, facilitando a manutenção.
  • Extensibilidade: Permite que subclasses adicionem funcionalidades sem modificar a estrutura base da superclasse.
  • Organização: Melhora a organização do código ao separar a lógica de métodos comuns e específicos em diferentes camadas de classe.

Conclusão – O que é Super em Python

Na aula de hoje vimos em detalhes como o super() funciona e sua importância dentro do conceito de herança, um pilar da programação orientada a objetos.

Compreender o uso do super() permite que você crie sistemas mais complexos, modulares e eficientes, além de facilitar o reuso e a flexibilidade do seu código.

Essa prática não apenas melhora a organização e a clareza, mas também torna o código mais fácil de expandir e manter em projetos maiores.

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Posts mais recentes de Python

Posts mais recentes da Hashtag Treinamentos

Diego Monutti

Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.