1
resposta

[Dúvida] Dúvida no código

Olá, pessoal!

Estou tendo dúvidas para entender qual o por quê de ser usado item.nome ao invés de self.nome, não entendi a lógica por trás.

@property
def exibir_cardapio(self):

        print(f'Cardapio do restaurante {self._nome}\n')
        
        for i,item in enumerate(self._cardapio,start=1):
        
            mensagem = f'{i}. Nome: {item._nome} | Preço: R${item._preco}
            
            print(mensagem)
1 resposta

Olá, Paola.

Tudo bem?

No contexto do seu código, self refere-se à instância da classe onde o método exibir_cardapio está sendo definido. Isso significa que self._nome acessa o atributo _nome dessa instância específica do restaurante.

Por outro lado, item é uma variável que representa cada item individual no cardápio (que é uma lista de objetos). Quando você usa item._nome, está acessando o atributo _nome desse item específico no cardápio, que é diferente do nome do restaurante.

Vamos ver um exemplo prático para esclarecer:

class Item:
    def __init__(self, nome, preco):
        self._nome = nome
        self._preco = preco

class Restaurante:
    def __init__(self, nome, cardapio):
        self._nome = nome
        self._cardapio = cardapio

    @property
    def exibir_cardapio(self):
        print(f'Cardapio do restaurante {self._nome}\n')
        for i, item in enumerate(self._cardapio, start=1):
            mensagem = f'{i}. Nome: {item._nome} | Preço: R${item._preco}'
            print(mensagem)

# Criando alguns itens
item1 = Item("Suco de Melancia", 5.0)
item2 = Item("Paozinho", 2.0)

# Criando o cardápio e o restaurante
cardapio = [item1, item2]
restaurante = Restaurante("Restaurante Praça", cardapio)

# Exibindo o cardápio
restaurante.exibir_cardapio

No exemplo acima, self._nome refere-se ao nome do restaurante ("Restaurante Praça"), enquanto item._nome refere-se ao nome de cada item no cardápio (por exemplo, "Suco de Melancia" e "Paozinho"). Portanto, self._nome é usado para acessar o nome do restaurante, e item._nome é usado para acessar o nome de cada item no cardápio.

Espero ter ajudado e bons estudos!