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.
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árioSistema de EmpréstimosFuncionalidade de BuscaInterface AdministrativaTestes e IntegraçãoPratique por conta própria: Compilador de Python online