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