2
respostas

Boa prática?

Boa tarde!

Se eu utilizasse (em produção) o dunder str ao invés de criar uma função "formata_data", seria uma boa prática?

 def __str__(self):
        data_f = self.momento_cadastro.strftime('%d/%m/%Y às %H:%M')
        return data_f

Implementação:

data = Datas()
print(data)

Valeu!

2 respostas

Vi que o professor utilizou isso posteriormente, mas achei um pouco redundante (dois métodos para a mesma coisa)...

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!