1
resposta

Design Pobre

Eu sei que provavelmente a ideia era mostrar o método hasattr() em uso, mas essa aula acabou sendo um mau exemplo de design.

Faz sentido usar o hasattr() para saber se o campo existe ou não e imprimi-lo.

O que não faz sentido é assumir que, se não tem o campo descrição, é uma bebida. Isso é uma verdade frágil, que pode ser quebrada tão logo se crie uma nova classe oriunda de ItemCardápio.

Ou se pergunta campo a campo e, caso exista o imprime, ou então faz teste com o isinstance() sobre de que classe é aquele item.

1 resposta

Olá! Como vai?

Essa abordagem pode realmente levar a um design frágil, pois depende da presença ou ausência de atributos específicos para diferenciar os tipos de itens.

Uma alternativa mais robusta seria utilizar o isinstance() para verificar explicitamente a classe do objeto. Isso tornaria o código mais claro e menos propenso a erros futuros, especialmente se novas classes forem adicionadas ao projeto. Aqui está um exemplo de como você poderia implementar isso:

@property
def exibir_cardapio(self):
    print(f'Cardapio do restaurante {self._nome}\n')
    for i, item in enumerate(self._cardapio, start=1):
        if isinstance(item, Prato):
            mensagem_prato = f'{i}. Nome: {item._nome} | Preço: R${item._preco} | Descrição: {item.descricao}'
            print(mensagem_prato)
        elif isinstance(item, Bebida):
            mensagem_bebida = f'{i}. Nome: {item._nome} | Preço: R${item._preco} | Tamanho: {item.tamanho}'
            print(mensagem_bebida)

Neste exemplo, Prato e Bebida são classes que você teria definido em seu projeto. Usando isinstance(), você verifica diretamente o tipo do item, o que é mais seguro e claro.

Espero ter ajudado e bons estudos!

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