1
resposta

[Projeto] Meu Codigo Comentado

class Restaurante:
    # “Toda vez que eu criar uma música, quero guardá-la em um lugar comum.”
    restaurantes = []
#  O método __init__ é chamado automaticamente quando uma nova instância de uma classe é criada. Serve como o construtor da classe, sendo executado imediatamente após a instância ter sido criada. #
# ! O self em Python é uma convenção que representa a instância da própria classe, utilizado como o primeiro parâmetro em métodos de instância, ou seja, métodos pertencentes a objetos específicos da classe #
    def __init__(self, nome, categoria):
        self.nome = nome
        self.categoria = categoria
        self.ativo = False
        Restaurante.restaurantes.append(self)
# A lista restaurantes é um atributo da classe Restaurante. A linha de código Restaurante.restaurantes.append(self), adiciona automaticamente a instância atual da classe Restaurante à lista restaurantes, que é um atributo de classe, porque é definida diretamente dentro do escopo da classe e fora de qualquer método específico. #
    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()

# Cada objeto criado é uma instância dessa classe

# Todas as instâncias são armazenadas em uma lista da própria classe

# Existe um método que lista todos os objetos criados

# Isso é um padrão comum em POO (Programação Orientada a Objetos) para simular um “banco de dados em memória”.

# Fluxo mental correto do código

# Pense assim:

# 1️⃣ A classe define o modelo
# 2️⃣ O __init__ cria objetos baseados nesse modelo
# 3️⃣ Cada objeto se registra automaticamente na lista da classe
# 4️⃣ Um método da classe percorre essa lista
# 5️⃣ Os dados são exibidos

# Resumo conceitual

# class → molde

# __init__ → nascimento do objeto

# self → o próprio objeto

# atributo de instância → dado individual

# atributo de classe → dado compartilhado

# __str__ → representação textual

# método de classe → opera sobre o conjunto de objetos
1 resposta

Olá, Lucas! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Gostei de como você organizou os comentários e explicou o fluxo mental da classe, deixando claro o papel do __init__, do self e da lista de classe para simular um banco de dados em memória. Fica fácil entender como cada instância se registra automaticamente.

Uma dica interessante para o futuro é usar métodos de classe com @classmethod, o que deixa explícito que o método trabalha com a classe e não com uma instância específica. Veja este exemplo:


class Restaurante:
    restaurantes = []

    def __init__(self, nome):
        self.nome = nome
        Restaurante.restaurantes.append(self)

    @classmethod
    def listar_restaurantes(cls):
        for r in cls.restaurantes:
            print(r.nome)

Esse código usa @classmethod para acessar a lista compartilhada e listar todos os objetos criados de forma mais clara.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!