Métodos Especiais

Em Python, existem métodos especiais, também conhecidos como métodos mágicos ou métodos dunder (double underscore methods), que começam e terminam com dois sublinhados (__). Esses métodos permitem que você personalize o comportamento padrão de objetos em operações comuns, como adição, subtração, impressão e comparação. Neste tutorial, vamos explorar alguns dos métodos especiais mais comuns em Python e como você pode usá-los para personalizar o comportamento das suas classes.

1. Método __init__: Construtor da Classe

O método __init__ é usado como o construtor da classe e é chamado quando você cria uma nova instância da classe.

class Pessoa:
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade

pessoa = Pessoa("Alice", 30)

2. Método __str__: Representação de String da Classe

O método __str__ retorna uma representação de string da instância da classe e é usado quando você chama a função print().

class Pessoa:
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade

    def __str__(self):
        return f"{self.nome}, {self.idade} anos"

pessoa = Pessoa("Alice", 30)
print(pessoa)  # Saída: Alice, 30 anos

3. Método __len__: Tamanho da Classe

O método __len__ retorna o tamanho da instância da classe e é usado quando você chama a função len().

class ListaPersonalizada:
    def __init__(self, elementos):
        self.elementos = elementos

    def __len__(self):
        return len(self.elementos)

lista = ListaPersonalizada([1, 2, 3, 4, 5])
print(len(lista))  # Saída: 5

4. Método __add__: Adição Personalizada

O método __add__ permite que você personalize a operação de adição para objetos da sua classe.

class Ponto:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, outro_ponto):
        novo_x = self.x + outro_ponto.x
        novo_y = self.y + outro_ponto.y
        return Ponto(novo_x, novo_y)

ponto1 = Ponto(1, 2)
ponto2 = Ponto(3, 4)
resultado = ponto1 + ponto2
print(f"({resultado.x}, {resultado.y})")  # Saída: (4, 6)

5. Método __eq__: Igualdade Personalizada

O método __eq__ permite que você personalize a operação de igualdade para objetos da sua classe.

class Pessoa:
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade

    def __eq__(self, outra_pessoa):
        return self.nome == outra_pessoa.nome and self.idade == outra_pessoa.idade

pessoa1 = Pessoa("Alice", 30)
pessoa2 = Pessoa("Alice", 30)
print(pessoa1 == pessoa2)  # Saída: True

Os métodos especiais em Python permitem que você personalize o comportamento das suas classes para operações comuns. Compreender como implementar métodos como __init__, __str__, __len__, __add__ e __eq__ oferece um controle poderoso sobre como os objetos da sua classe interagem com operações e funções embutidas do Python.