Carregando...

Métodos especiais

Um método especial faz o próprio crachá responder a print e a len. No primeiro programa, print(guest) escreve badge mira, e quem entra em ação é str. Você não escreve guest.str(): basta print(guest) para executá-lo. O nome mira fica guardado em um Badge; nenhum pacote é instalado e nenhuma pasta é criada. Ao escrever Badge("mira"), init roda, e self é esse crachá. str devolve as palavras, e é print que as coloca na tela. Entre badge e mira há um único espaço.

print executa __str__

python
class Badge:
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return "badge " + self.name

guest = Badge("mira")
print(guest)

A tela mostra uma única linha: badge mira. O nome guardado é mira; a palavra badge na frente é acrescentada por str, e quem escreve a linha é print. Se este programa não tivesse print, a tela ficaria vazia, porque devolver as palavras não é o mesmo que escrevê-las. Também não existe guest.str() no programa: print(guest) já chama esse método especial. Um crachá sem str não escreve badge mira. A linha traria o nome da classe e um endereço na memória. None não é escrito.

len executa __len__

python
class Badge:
    def __init__(self, name):
        self.name = name
    def __len__(self):
        return len(self.name)

guest = Badge("mira")
print(len(guest))

O segundo programa é separado, e a tela dele mostra o inteiro 4, não badge mira nem mira. Ele define len, que devolve len(self.name), e print(len(guest)) escreve 4. A palavra mira tem quatro letras: m, i, r, a. Por isso o resultado é 4, sem ponto decimal, e o nome guardado não tem espaço nenhum. Este programa não define str, então não escreve badge mira. Se len não existisse, len(guest) pararia o programa. A parada se chama TypeError. None não é escrito e o programa não continua. Essa linha com erro não está no programa.

📊 O que você escreve e o que aparece

O que você escreve O que a tela mostra
print(guest) badge mira
print(len(guest)) 4
len(guest) sem __len__ o programa para

A próxima página coloca um objeto dentro de outro objeto. Esta página mostra só dois métodos especiais em um único crachá chamado mira.

Duas respostas, um só crachá

print(guest) escreve badge mira porque str roda. print(len(guest)) escreve 4 porque len roda, e 4 é a quantidade de letras de mira. Depois desses nomes especiais, você não acrescenta parênteses. A próxima página coloca um objeto dentro de outro objeto.

🧠 Teste Seu Conhecimento

Pronto para Começar

Teste Seu Conhecimento

Desafie-se com este questionário interativo e veja o quão bem você entende o tópico

❓
5
Perguntas
🎯
70%
Para Passar
♾️
∞
Tempo
🔄
∞
Tentativas

📝 Instruções

  • Leia cada pergunta cuidadosamente
  • Selecione a melhor resposta para cada pergunta
  • Você pode refazer o quiz quantas vezes quiser
  • Seu progresso será mostrado no topo