Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Duvida quanto ao metodo __str__

Ao avançar no curso construimos o seguinte código:

class Restaurante:
    restaurantes = []
    def __init__(self,nome,categoria):
        self._nome = nome.title()
        self._categoria = categoria.upper()
        self._ativo = False
        self._avaliacao = []
        Restaurante.restaurantes.append(self)

    def __str__(self):
        return f'{self._nome} | {self._categoria} | {self.ativo}'
       
  
    @classmethod
    def listar_restaurantes(cls):
        print(f'{'Nome do Restaurante:'.ljust(25)} | {'Categoria:'.ljust(25)} | {'Status:'}')
        for restaurante in cls.restaurantes:
            print(f'{restaurante._nome.ljust(25)} | {restaurante._categoria.ljust(25)} | {restaurante.ativo}')
            
            

    @ property
    def ativo(self):
        return '✅' if self._ativo else '❌'
    
       
    def alternar_status(self):
        self._ativo = not self._ativo

Qual a utilidade do metodo "def str" nesse condigo especificamente? Quando retiro ele do script, a lista de restaurantes continua aparecendo da mesma forma. Em um primeiro momento eu entendi que ele retorna o objeto no formato de string. Mas quando criamos o metodo de classe listar_restaurantes, aparentemente o str perdeu a utilidade.

2 respostas
solução!

Oi, dev! Tudo bem?

O método __str__ é um método especial, usado para definir uma representação em string do objeto para fins de exibição, ou seja, quando tentamos imprimir o objeto ou convertê-lo em uma string, o Python chama automaticamente esse método.

Porém, assim como descrito no tópico No seu caso, o método de classe listar_restaurantes continua funcionando mesmo removendo o método __str__ da classe Restaurante, pois ele não depende diretamente do método __str__, já que estamos acessando diretamente os atributos do objeto e formatando-os em uma string.

No entanto, se tentarmos imprimir um objeto da classe Restaurante diretamente, como por exemplo print(restaurante_praca), aí sim o método __str__ será chamado e caso ele não exista, o Python irá imprimir o endereço de memória do objeto, que geralmente não é muito útil.

Espero ter ajudado! Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓

entendi, muito obrigado