Depois de muito tempo tentando entender a fundo sobre o assunto resolvi fazer um post sobre os Métodos Mágicos
Os métodos mágicos em Python são uma das características mais poderosas e interessantes da linguagem. Eles permitem que você defina comportamentos personalizados para suas classes, que são executados automaticamente em resposta a eventos específicos, como a criação de um objeto ou a representação de um objeto como uma string.
Esses métodos são chamados de mágicos porque eles começam e terminam com dois caracteres de sublinhado. Por exemplo, o método __init__
é chamado quando um objeto é criado, enquanto o método __str__
é chamado quando um objeto é convertido em uma string.
Vamos ver alguns exemplos de métodos mágicos magicando:
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def __str__(self):
return f"{self.nome} tem {self.idade} anos."
def __repr__(self):
return f"Pessoa('{self.nome}', {self.idade})"
Neste exemplo, temos uma classe Pessoa com três métodos mágicos definidos: __init__
, __str__
e __repr__
.
O método __init__
é usado para inicializar o objeto com o nome e a idade da pessoa. Quando um objeto Pessoa é criado, o método __init__
é chamado automaticamente com os argumentos fornecidos.
O método __str__
é usado para definir como o objeto deve ser representado como uma string. Neste caso, estamos retornando uma string que contém o nome e a idade da pessoa.
O método __repr__
é semelhante ao método __str__
, mas é usado para representar o objeto como uma string que pode ser usada para criar um novo objeto com os mesmos valores. Neste caso, estamos retornando uma string que contém o nome e a idade da pessoa, formatada de forma que possa ser usada para criar uma nova instância da classe Pessoa.
Com esses métodos mágicos definidos, podemos criar objetos Pessoa e convertê-los em strings ou representações de string:
pessoa1 = Pessoa("João", 30)
print(pessoa1) # João tem 30 anos
print(repr(pessoa1)) # Pessoa('João', 30)
Também podemos usar esses métodos para personalizar o comportamento de outras operações em nossas classes. Por exemplo, podemos definir os métodos __eq__
e __lt__
para permitir que objetos Pessoa sejam comparados uns com os outros:
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def __str__(self):
return f"{self.nome} tem {self.idade} anos."
def __repr__(self):
return f"Pessoa('{self.nome}', {self.idade})"
def __eq__(self, other):
if not isinstance(other, Pessoa):
return NotImplemented
return self.nome == other.nome and self.idade == other.idade
def __lt__(self, other):
if not isinstance(other, Pessoa):
return NotImplemented
return self.idade < other.idade
Neste exemplo, definimos os métodos __eq__
e __lt__
para permitir que objetos Pessoa sejam
comparados uns com os outros. O método __eq__
é usado para verificar se dois objetos Pessoa são iguais, enquanto o método __lt__
é usado para determinar se um objeto Pessoa é menor que outro em termos de idade.
Com esses métodos definidos, podemos comparar objetos Pessoa com o operador == e os operadores de comparação (<, <=, >, >=)
pessoa1 = Pessoa("João", 30)
pessoa2 = Pessoa("Maria", 25)
pessoa3 = Pessoa("João", 30)
print(pessoa1 == pessoa2) # False
print(pessoa1 == pessoa3) # True
pessoas = [pessoa1, pessoa2, pessoa3]
pessoas_ordenadas = sorted(pessoas)
for pessoa in pessoas_ordenadas:
print(pessoa) # Maria tem 25 anos., João tem 30 anos., João tem 30 anos.
Neste exemplo, criamos três objetos Pessoa com nomes e idades diferentes e os comparamos usando os métodos __eq__
e __lt__
Também criamos uma lista de objetos Pessoa e os ordenamos usando a função sorted e o método __lt__
Como você pode ver, os métodos mágicos em Python são uma ferramenta poderosa para personalizar o comportamento das suas classes e permitir que elas sejam usadas de maneira mais intuitiva e flexível. Com a prática e a experimentação, você pode descobrir ainda mais maneiras de usar esses métodos para tornar sua programação Python mais eficiente e elegante
Top comments (0)