Python usa a palavra "métodos mágicos" , porque esses métodos realmente fazem mágica para seu programa. Uma das maiores vantagens de usar os métodos mágicos do Python é que eles fornecem uma maneira simples de fazer os objetos se comportarem como tipos embutidos. Isso significa que você pode evitar maneiras feias, contra-intuitivas e não padronizadas de realizar operações básicas.
Considere o seguinte exemplo:
dict1 = {1 : "ABC"}
dict2 = {2 : "EFG"}
dict1 + dict2
Traceback (most recent call last):
File "python", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
Isso dá um erro, porque o tipo de dicionário não suporta adição. Agora, vamos estender a classe de dicionário e adicionar o método mágico "__add__" :
class AddableDict(dict):
def __add__(self, otherObj):
self.update(otherObj)
return AddableDict(self)
dict1 = AddableDict({1 : "ABC"})
dict2 = AddableDict({2 : "EFG"})
print (dict1 + dict2)
Agora, ele fornece a seguinte saída.
{1: 'ABC', 2: 'EFG'}
Assim, ao adicionar este método, de repente a mágica aconteceu e o erro que você estava obtendo antes desapareceu.
Espero que isso deixe as coisas claras para você. Para obter mais informações, consulte:
A Guide to Python's Magic Methods (Rafe Kettler, 2012)
len()
oureversed()
se aplica a muitos tipos de objetos, mas um método comoappend()
se aplica apenas a sequências, etc.