Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida

No caso desse código, como foi definido um método próprio para exibir o nome e os dados dos restaurantes, não precisaria do método __str__ né?

class Restaurante:
    restaurantes = []

    def __init__(self, nome, categoria):
        self.nome = nome
        self.categoria = categoria
        self.ativo = False
        Restaurante.restaurantes.append(self)
    
    def __str__(self):
        return f'{self.nome} | {self.categoria}'
    
    def listar_restaurantes():
        for restaurante in Restaurante.restaurantes:
            print(f'{restaurante.nome} | {restaurante.categoria} | {restaurante.ativo}')

restaurante_praca = Restaurante('Praça', 'Gourmet')
restaurante_pizza = Restaurante('Pizza Express', 'Italiana')

Restaurante.listar_restaurantes()
1 resposta
solução!

Bom dia, Mitsuyoshi! Tudo bem com você?

Excelente pergunta, é recomentado manter o método __str__ mesmo que a nossa aplicação possua um método que irá listar todos os restaurantes criados.

Mas por qual motivo? Um motivo até simples, o método __str__ é responsável por definir como uma instância da classe deve ser representada como uma string. Já o método listar_restaurantes é responsável por retornar todas as instâncias da classe como uma string. Em alguns casos precisaremos imprimir apenas um objeto, é aí que o método __str__ vai ser chamado e usado.

Como, por exemplo, caso precisássemos de imprimir apenas o objeto restaurante_praca, basta fazermos print(restaurante_praca), o Python irá automaticamente usar o método __str__ para determinar o que será exibido. Nesse caso, ele mostrará 'Praça | Gourmet', que é a representação definida no método __str__.

Em resumo, é importante sempre termos um método __str__, pois ele é útil para fornecer uma representação legível de um único objeto quando necessário e facilitar o debug.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado