O que é Self em Python – Explicação Completa

Você sabe o que é self em Python? Como ele funciona? Para que serve? Aprenda de uma vez o que é o self 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!

O que você aprende neste vídeo

Resposta rápida: No exemplo de um site da Netflix, com uma classe de filmes, a aula mostra o self nos métodos, para chamá-los a partir do filme criado e de dentro de outro método, e nos atributos, guardando no __init__ os valores recebidos para usá-los em qualquer método. Classes em profundidade ficam para outro vídeo do canal.

Neste vídeo (24 min):

  • 1:00 - Monta o exemplo de um site da Netflix: a classe de filmes tem atributos, as informações do filme (título, descrição, arquivo de vídeo), e métodos, as ações do usuário com ele (dar play, pausar, ver o trailer).
  • 2:49 - Põe um print no __init__, cria um filme, uma instância da classe, e a mensagem aparece sem nenhuma chamada ao __init__.
  • 2:59 - Explica que self, em inglês, é algo como você mesmo, e avisa que ele só aparece dentro da construção da classe, para se referir ao próprio filme que está sendo criado.
  • 4:11 - Cria o método de assistir ao filme, que por enquanto só imprime uma mensagem de play, com o self entre os parênteses: todo filme criado passa a ter esse método.
  • 5:21 - Chamado sozinho, fora do filme, o método dá erro de função não definida; chamado a partir do filme criado, roda e mostra a mensagem de play.
  • 6:49 - Cria um método que calcula a duração (130 minutos, um número que ele inventa para o exemplo) e o chama dentro do método de assistir, com self. na frente.
  • 9:30 - Passa ao __init__ o título, a descrição e o arquivo de vídeo como parâmetros: daí em diante, criar um filme exige essas três informações.
  • 13:19 - Mostra o problema: o título e o arquivo de vídeo chegaram no __init__, e o método de assistir não os tem, a não ser que o usuário os passe de novo.
  • 14:28 - No __init__, guarda os três valores como atributos do filme, com self. na frente do nome.
  • 16:56 - No método de assistir, troca as variáveis pelos atributos, e a mensagem de play sai com o arquivo e o título do filme.
  • 19:29 - Fora da classe, lê o título direto do filme criado (o objeto, ponto, título) e recebe Não Olhe para Cima.
  • 19:55 - Troca a descrição guardada por um texto fixo e mostra que é ele que aparece, mesmo com outra descrição passada na criação do filme.

Trechos do vídeo:

  • Ao criar o objeto, o self não é passado: entram só os valores que vêm depois dele no __init__, na ordem ou pelo nome de cada parâmetro, como numa função comum.
  • Na linha em que o atributo recebe o parâmetro de mesmo nome, os dois são coisas diferentes: o nome com self. é o atributo do objeto, e o nome sozinho é o valor que chegou na criação. Usar o mesmo nome nos dois é costume, e não obrigação.
  • Dentro da classe, um método chama outro com self. na frente. Sem ele, o método não é reconhecido, e uma função de mesmo nome definida fora da classe seria outra função, e não o método da classe.
  • Os atributos definidos no __init__ ficam disponíveis em qualquer outro método da classe, porque o __init__ roda no momento em que o objeto é criado, antes de qualquer método ser chamado nele.

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 self é o parâmetro que representa a instância atual dentro dos métodos de uma classe em Python. Ele é sempre o primeiro parâmetro do método, e é por ele que se lê e se grava os atributos daquele objeto, como em self.titulo. O self não é palavra reservada: o nome é convenção, e o Python o preenche sozinho quando você chama o método a partir do objeto.

Ícone PythonPython Impressionador

Você vai aprender a linguagem de Programação que mais cresce no Mundo para fazer automações incríveis, desenvolver sites, fazer análises de dados, trabalhar com Ciência de Dados, Inteligência Artificial, mesmo que você nunca tenha tido nenhum contato com Programação na vida.

Começar agoraSeta para a direita
Fundo PythonTelas Python
Luz Python

O que é Self em Python – Explicação Completa

Quando programamos em Python, um dos conceitos mais importantes para trabalhar com programação orientada a objetos é entender o conceito de self.

Essa palavra-chave é fundamental na estruturação de classes e objetos, pois representa a instância atual da classe, permitindo o acesso a atributos e métodos pertencentes a essa instância.

Nesta aula, você verá detalhadamente como o self funciona, entenderá por que ele é tão importante e como utilizá-lo de forma eficiente.

O que é Self?

Em Python, o termo self é uma convenção usada exclusivamente na construção de classes para referenciar a instância atual de um objeto.

Embora não seja uma palavra-chave reservada, o self é essencial para definir métodos que possam acessar atributos e outras funções da mesma instância.

Dentro da programação orientada a objetos (POO), uma classe é a estrutura que descreve o comportamento e as características que os objetos criados a partir dela terão.

Quando criamos um método dentro de uma classe, o primeiro parâmetro desse método geralmente é a palavra self. Esse parâmetro funciona como um “identificador” que representa a instância do objeto específico ao qual o método está sendo aplicado.

Por meio do self, conseguimos acessar os atributos e métodos da instância atual da classe.

Caso você ainda não entenda o conceito de classes e objetos no Python, recomendo que você veja a aula: Classes no Python – Como Sair do Zero

Uso do Self na Construção da Classe – Exemplo Prático

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

Nesse sistema, cada filme terá características (atributos) e ações específicas que podem ser executadas (métodos).

Dessa forma, podemos representar um filme como uma classe em Python, onde cada filme terá atributos como título, descrição e o arquivo de vídeo em si, além de métodos para executar funções como assistir ao filme e calcular sua duração.

Python
class Filme():
    def __init__(self, valor_do_titulo, descricao, arquivo_video):
        self.titulo = valor_do_titulo
        self.arquivo_video = arquivo_video
        self.descricao = descricao

    def assistir_filme(self):
        duracao = self.calcular_duracao_filme()
        print("Dar play no arquivo de video", self.arquivo_video, "do filme", self.titulo, "que tem", duracao, "minutos de duração")

    def calcular_duracao_filme(self):
        # comandos para calcular a duração do filme
        return 130

Nesse exemplo, self.titulo, self.arquivo_video e self.descricao são atributos específicos da instância do filme que está sendo criada.

Ao utilizar self, associamos essas características ao objeto individual, permitindo que cada filme tenha suas próprias informações.

Quando utilizamos self.titulo dentro do método assistir_filme, o Python entende que estamos nos referindo ao título específico do filme que será assistido naquele momento.

É importante dizer que é comum que nomes de parâmetros e atributos coincidam. Neste exemplo, temos self.arquivo_video = arquivo_video para associar o parâmetro arquivo_video ao atributo self.arquivo_video.

Isso facilita a leitura e padronização do código. No entanto, você também pode diferenciá-los para evitar confusão, caso sinta necessidade, como fizemos com o atributo self.titulo, que recebe valor_do_titulo como parâmetro.

Self e a Função __init__

A função __init__ é o método especial de inicialização de classes em Python, conhecido como construtor da classe. Ele é executado automaticamente toda vez que uma nova instância da classe é criada.

Dentro dessa função, o self é usado para definir os atributos obrigatórios de cada objeto. No nosso exemplo, isso permite que cada instância da classe Filme armazene informações únicas.

Vamos criar o filme Não Olhe Para Cima, com sua descrição e o nome do arquivo de vídeo.

Python
filme1 = Filme("Não olhe para cima","Filme de meteoros e fim do mundo", "nao_olhe_para_cima.mp4")

Neste caso, ao criarmos o objeto filme1 atribuindo a ele a classe Filme, o Python executa o método __init__ da classe e atribui os valores fornecidos aos atributos self.titulo, self.descricao e self.arquivo_video dessa instância.

Dessa forma, podemos acessar os atributos e métodos referentes ao objeto filme1. Por exemplo, ao executarmos o método filme1.assistir_filme(), o método assistir_filme será chamado para essa instância específica.

Esse método usará o self para acessar o título e o arquivo de vídeo específicos do filme Não Olhe Para Cima e também chamará o método calcular_duracao_filme.

Obs.: Para esse exemplo, estamos utilizando o método calcular_duracao_filme com um valor fixo retornado, mas em um sistema completo, ali seriam desenvolvidos os cálculos de duração para cada filme específico de acordo com as informações fornecidas.

Python
filme1 = Filme("Não olhe para cima","Filme de meteoros e fim do mundo", "nao_olhe_para_cima.mp4")
filme1.assistir_filme()
Self e a Função __init__

Observe que a mensagem exibida no terminal traz as informações conforme definidas no momento de criação do objeto filme1.

Acessando Atributos e Métodos com self

A principal vantagem do self é permitir que os atributos e métodos possam ser chamados de dentro de outros métodos, o que torna o código modular e reutilizável.

Como vimos no caso da função assistir_filme(), que chama o método calcular_duracao_filme() e acessa os atributos arquivo_video e titulo.

Além disso, em Python, os métodos definidos com self no início são chamados de “métodos de instância” e estão disponíveis para todos os objetos criados a partir de uma classe.

Da mesma forma, os atributos desse objeto podem ser acessados e visualizados ao utilizarmos o nome do objeto seguido do nome do atributo que queremos acessar, separados por ponto.

Por exemplo, podemos imprimir o título e a descrição do filme1 dessa forma:

Python
print(filme1.titulo)
print(filme1.descricao)
Acessando Atributos e Métodos com self

Resumo do que é o Self e para que ele serve?

De forma resumida, o termo self refere-se ao objeto atual da classe, permitindo acessar atributos e métodos dentro de uma instância específica.

O uso do self oferece várias vantagens:

  • Acesso consistente aos atributos e métodos da instância;
  • Organização do código, mantendo cada instância independente das demais;
  • Flexibilidade para criar múltiplas instâncias com dados distintos.

Essas características tornam o self um componente essencial na orientação a objetos em Python, permitindo a criação de aplicações robustas e modulares.

Usando self, você aproveita o potencial da programação orientada a objetos em Python para desenvolver classes e métodos que melhoram a organização do código e permitem o desenvolvimento de projetos mais complexos.

Saiba mais em: Programação Orientada a Objetos! Como Funcionam as Classes?

Conclusão – O que é Self em Python – Explicação Completa

O uso do self é essencial na criação de classes em Python, pois permite associar atributos e métodos diretamente à instância atual, tornando o código modular e reutilizável.

Nessa aula, você aprendeu como utilizar o self para acessar e manipular os dados e comportamentos de cada objeto, tornando seu código mais organizado e eficiente.

Ao entender e usar o self, você dominará um dos conceitos fundamentais da programação orientada a objetos em Python, facilitando o desenvolvimento de aplicativos e sistemas complexos.

Perguntas frequentes

1. O self é uma palavra reservada do Python?

Não. O self é uma convenção da comunidade: o primeiro parâmetro poderia ter qualquer nome válido e o código funcionaria igual. Como praticamente todo mundo usa self, fugir dessa convenção só dificulta a leitura do seu código por outras pessoas.

2. Por que preciso escrever self em todo método da classe?

Porque é assim que o Python entrega ao método o objeto sobre o qual ele foi chamado. Quando você escreve filme1.assistir_filme(), o Python executa Filme.assistir_filme(filme1) nos bastidores, e o filme1 chega no parâmetro self.

3. Qual a diferença entre self.titulo e titulo dentro de um método?

self.titulo é um atributo do objeto e continua existindo depois que o método termina, acessível de qualquer outro método da classe. Já o titulo sozinho é uma variável local: existe apenas durante a execução daquele método e se perde no fim dele.

4. O que acontece se eu esquecer o self na definição do método?

O Python levanta um TypeError avisando que o método recebeu um argumento a mais do que o esperado. Isso acontece porque ele passa a instância de qualquer forma, e não existe parâmetro definido para recebê-la.

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