Olá Rangel, tudo bem com você?
Peço desculpas pela demora em lhe responder.
O uso do dunder métodos ou métodos mágicos tem como um dos objetivos proporcionar um modo prático para realizarmos algo.
Quando criamos uma classe queremos que os objetos criados a partir dessa classe possam ter comportamentos pré-definidos, alguns desses comportamentos são comportamentos já mapeados pelo Python. Os dunder métodos possuem esse mapeamento de comportamento, quando estamos utilizando eles em nossas classes, estamos firmando um “contrato” com o python, informando que nosso objetos devem poder fazer ou ter determinado comportamento mas respeitando as regras impostas pelos dunder métodos.
Quando devemos usá-los?
Digamos que temos uma classe data que deve retornar a data atual e a hora, implementando essa classe ela teria uma estrutura como o código abaixo:
import datetime as dt
class Datas:
def __str__(self):
data_atual = dt.datetime.now()
data_atual_formatada = data_atual.strftime('%d/%m/%Y às %H:%M')
return data_atual_formatada
Note o uso do dunder método, quando criamos essa classe entendemos que vamos precisar que o objeto possa ser impresso para o usuário, já que o objetivo dela é informar uma data e hora, assim utilizamos o dunder método, que nos permite obter a representação do em string do objeto sem a necessidade do uso de um método.
Para obtermos essa representação, basta usarmos print(< nome_do_objeto>), como mostrado abaixo:
data = Datas()
print(data)
Resultado
12/05/2022 às 09:25
Em contrapartida, se tivermos uma classe onde o objetivo é apenas efetuar um cadastro de produtos sem a necessidade de exibir para o usuário uma representação em string, não será necessário implementarmos o uso do dunder str (str).
class Cadastro:
def __init__(self, nome, data):
self.nome = nome
self.data = data
produto1 = Cadastro('Filme', 1998)
produto2 = Cadastro('Série', 2003)
O uso dos métodos dunder está ligado a finalidade de nossas classes, devemos entender qual o objetivo final para a classe e quais as operações que ela vai possuir, assim poderemos escolher os melhores métodos mágicos para aquela classe.
Quando o professor apresenta dois métodos para um mesmo fim tem como objetivo apresentar as possibilidades de programação, com o objetivo didático, como vimos anteriormente, o uso irá depender do objetivo da classe.
Em caso de dúvidas, coloco-me à disposição.
Abraços e bons estudos.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!