Introdução: Orientação a Objetos em Python¶
Python é uma linguagem de programação que suporta várias abordagens de programação, incluindo a programação orientada a objetos (OOP). A OOP é um paradigma de programação baseado no conceito de objetos, que podem conter dados na forma de campos, frequentemente conhecidos como atributos; e códigos, na forma de procedimentos, frequentemente conhecidos como métodos.
Conceitos Básicos de OOP¶
Classes e Instâncias¶
- Classes: Um modelo para criar objetos que definem um conjunto de atributos e métodos correspondentes a um tipo de objeto.
- Instâncias: Um objeto individual construído a partir de uma classe.
Atributos e Métodos¶
- Atributos: Variáveis pertencentes a uma classe ou instância.
- Métodos: Funções pertencentes a uma classe ou instância.
Herança¶
- Herança: A capacidade de uma classe herdar atributos e métodos de outra classe.
Encapsulamento¶
- Encapsulamento: A prática de ocultar detalhes internos ou dados de uma classe, expondo apenas interfaces seguras.
Polimorfismo¶
- Polimorfismo: A capacidade de apresentar a mesma interface para diferentes tipos fundamentais.
Progress
Continuar...
Definindo uma Classe¶
Uma classe é definida usando a palavra-chave class, seguida pelo nome da classe e um bloco de código com métodos e atributos.
Estrutura de uma Classe¶
Uma classe é composta por atributos (variáveis) e métodos (funções). Aqui está a estrutura básica de uma classe em Python:
class NomeDaClasse:
    # Atributos de classe
    atributo_de_classe = valor
    def metodo1(self):
        # Código do método1
        pass
Tip
É uma boa pratica iniciar o nome de uma classe com a letra maiuscula e os metodos com letra minuscula
Atributos e Métodos de Instância¶
Atributos de instância são variáveis associadas a uma instância da classe. Métodos de instância são funções associadas a uma instância da classe e podem acessar atributos de instância através do self. 
class NomeDaClasse:
    # Atributos de classe
    atributo_de_classe = valor
    def metodo1(self):
        # Código do método1
        pass
    def metodo2(self):
        # Código do método2
        pass
O Método __init__¶
O método __init__ é um construtor em Python. É chamado automaticamente quando um novo objeto da classe é criado. Ele inicializa os atributos da nova instância da classe.
class NomeDaClasse:
    # Atributos de classe
    atributo_de_classe = valor
    def __init__(self, parametro1, parametro2):
        # Atributos de instância
        self.atributo1 = parametro1
        self.atributo2 = parametro2
    def metodo1(self):
        # Código do método1
        pass
    def metodo2self):
        # Código do método2
        pass
Agora vamos ver em um outro exemplo:
class Pessoa:
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade
    def cumprimentar(self):
        return f"Olá, meu nome é {self.nome} e eu tenho {self.idade} anos."
Criando uma Instância de uma Classe¶
Para criar uma instância de uma classe, você chama a classe usando o nome da classe seguido por parênteses, passando os argumentos que o método __init__ requer.
pessoa1 = Pessoa("Junior", 18)
print(pessoa1.cumprimentar())
Exercicios¶
- 
Restaurante: Crie uma classe chamada Restaurante. O método__init__()de Restaurante deve armazenar dois atributos:restaurante_nomeetipo_cozinha.- 
Crie um método chamado descreve_restaurante()que mostre essas duas informações, e um método de nomerestaurante_aberto()que exiba uma mensagem informando que o restaurante está aberto.
- 
Crie uma instância chamada restaurantea partir de sua classe. Mostre os dois atributos individualmente e, em seguida, chame os dois métodos.
 
- 
- 
Três restaurantes: Comece com a classe do Exercício 1. Crie três instâncias diferentes da classe e chame descreve_restaurante() para cada instância. 
- 
Usuários: Crie uma classe chamada Usuario. Crie dois atributos de nomesprimeiro_nomeeultimo_nomee, então, crie vários outros atributos normalmente armazenados em um perfil de usuário.- 
Escreva um método de nome descreve_usuario()que apresente um resumo das informações do usuário.
- 
Escreva outro método chamado saudacao_usuario()que mostre uma saudação personalizada ao usuário.
- 
Crie várias instâncias que representem diferentes usuários e chame os dois métodos para cada usuário. 
 
-