Introdução aos Métodos Mágicos
Parte da seção Object Oriented Programming do Journey de Python da Coddy — lição 33 de 64.
Métodos mágicos (também chamados de métodos dunder) são métodos especiais com sublinhados duplos no início e no fim. O Python os chama automaticamente em resposta a certas operações.
Aqui está um exemplo de uma classe com métodos mágicos:
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
def __str__(self):
return f"{self.title} by {self.author}"O método __init__ é chamado automaticamente quando você cria um objeto:
my_book = Book("Python Programming", "John Smith", 350)O método __str__ é chamado automaticamente quando você converte o objeto em uma string:
print(my_book) # Chama __str__ automaticamente
print(str(my_book)) # Também chama __str__Saída:
Python Programming by John Smith
Python Programming by John SmithSem o __str__, a impressão mostraria o local da memória do objeto:
class SimpleBook:
def __init__(self, title):
self.title = title
simple = SimpleBook("Test Book")
print(simple) # <__main__.SimpleBook object at 0x...>Adicione outro método mágico para o comprimento:
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
def __str__(self):
return f"{self.title} by {self.author}"
def __len__(self):
return self.pages
my_book = Book("Python Programming", "John Smith", 350)
print(len(my_book)) # Chama __len__ automaticamenteSaída:
350Ponto Chave: Métodos mágicos começam e terminam com duplos underscores (__method__) e são chamados automaticamente pelo Python. Eles permitem que seus objetos funcionem com funções integradas como str(), len() e operadores, tornando suas classes mais Pythonic e intuitivas de usar.
Desafio
FácilNeste desafio, você implementará uma classe Counter com métodos mágicos.
counter.py- Este é o arquivo que você precisa editar, contendo comentários TODO para guiar sua implementaçãodriver.py- Contém casos de teste extensivos
Implemente a classe Counter em counter.py e os casos de teste em driver.py seguindo os comentários TODO. A classe deve suportar inicialização com valores opcionais, representação em string e operações de adição.
Folha de consulta
Métodos mágicos (métodos dunder) são métodos especiais com sublinhados duplos que o Python chama automaticamente em resposta a certas operações.
Métodos mágicos comuns:
__init__- Chamado ao criar um objeto__str__- Chamado ao converter para string comstr()ouprint()__len__- Chamado ao usar a funçãolen()
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
def __str__(self):
return f"{self.title} by {self.author}"
def __len__(self):
return self.pages
my_book = Book("Python Programming", "John Smith", 350)
print(my_book) # Chama __str__ automaticamente
print(len(my_book)) # Chama __len__ automaticamenteSem o __str__, a impressão mostra a localização de memória do objeto em vez de um formato legível.
Experimente você mesmo
# TODO: Importar a classe Counter de counter.py
# Use o formato: from counter import Counter
# Manipulador abrangente de casos de teste
test_case = input()
if test_case == "init_test":
# TODO: Testar a inicialização com valor padrão
# Criar um contador sem argumentos e imprimi-lo
# Saída esperada: "Count: 0"
pass
elif test_case == "init_with_value":
# TODO: Testar a inicialização com um valor específico
# Criar um contador com valor inicial 10 e imprimi-lo
# Nota: print() chama implicitamente __str__, mas nosso foco aqui é testar __init__
# Saída esperada: "Count: 10"
pass
elif test_case == "addition":
# TODO: Testar a operação de adição
# Criar um contador com valor 3, adicionar 7 a ele e imprimir o resultado
# Saída esperada: "Count: 10"
pass
elif test_case == "chained_addition":
# TODO: Testar operações de adição encadeadas
# Criar um contador com valor 1, adicionar 2, depois adicionar 3 ao resultado e imprimir
# Saída esperada: "Count: 6"
pass
elif test_case == "negative_values":
# TODO: Testar com valores negativos
# Criar um contador com valor -5 e imprimi-lo
# Em seguida, adicionar -3 a ele e imprimir o resultado
# Saídas esperadas: "Count: -5" e "Count: -8"
pass
elif test_case == "zero_value":
# TODO: Testar com valores zero
# Criar um contador com valor 0, adicionar 0 e imprimir
# Saída esperada: "Count: 0"
pass
elif test_case == "large_values":
# TODO: Testar com valores grandes
# Criar um contador com valor 1000000 e adicionar 9000000
# Saída esperada: "Count: 10000000"
pass
elif test_case == "multiple_counters":
# TODO: Testar a interação entre múltiplos contadores
# Criar counter1 com valor 5 e counter2 com valor 10
# Imprimir ambos os contadores
# Saídas esperadas: "Count: 5" e "Count: 10"
pass
elif test_case == "type_validation":
# TODO: Testar a adição de tipos diferentes
# Tentar adicionar um float (2.5) a um contador com valor 5
# Saída esperada: "Count: 7.5"
passEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Object Oriented Programming
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosO Parâmetro selfMétodosAtributosMétodo Construtor (__init__)Recapitulação - Calculadora Simples4Herança
Herança BásicaA Função super()Sobrescrita de MétodoHerança MúltiplaOrdem de Resolução de MétodosRecapitulação - Hierarquia de Funcionários7Métodos Especiais
Introdução aos Métodos MágicosSobrecarga de OperadoresMétodos Mágicos de ContêinerRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução a Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão Strategy2Decoradores
Introdução aos DecoradoresDecorador de PropriedadeDecorador de Método EstáticoDecorador de Método de Classe5Polimorfismo
Sobrescrita de Método RevisitadaDuck TypingClasses e Métodos AbstratosDesign de InterfacesRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição vs HerançaMixinsMétodos Estáticos e de ClasseDecoradores de ClasseGerenciadores de Contexto11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Propriedades de Classe
Variáveis de Instância vs de ClasseDecoradores de PropriedadeAtributos PrivadosRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Membros Públicos, Protegidos e PrivadosModificadores de AcessoOcultação de InformaçãoProperty Decorators AvançadosRecapitulação - Sistema de Registro de Alunos12Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses Livro e Usuário