Olá, este curso será ministrado pela Laís Urano e pelo Guilherme Lima. Boas-vindas a mais um curso de Python!
Autodescrição: Laís se considera uma mulher parda, de olhos e cabelos castanhos, cabelos encaracolados. Enquanto o Guilherme usa óculos, tem barba e cabelo curto. Eles estão nos estúdios da Alura, sentado à uma mesa preta, um de frente para o outro. Sobre a mesa, há dois laptops, um mouse sobre um mousepad e dois microfones. A parede ao fundo tem uma iluminação azul.
Guilherme: Estamos muito felizes de ter você neste curso de Python, orientação a objetos, API, e cada vez mais próximo de um framework do back-end, certo?
Laís: Neste curso, vamos aprender conceitos muito importantes e aprofundar na questão de classes com heranças, polimorfismo, entre outros assuntos.
Guilherme: Além disso, vamos aprender o que são ambientes virtuais e por que eles são muito importantes para conseguirmos isolar dependências e manter nosso projeto cada vez mais performático e seguro, especialmente para quando formos trabalhar com diversos projetos.
Laís: Também vamos abordar um conceito muito importante para o back-end, que é a API.
Guilherme: Neste curso, estaremos mais próximos do Back-end aplicado com Python, mais voltados ao mercado, especificamente com Django, com FastAPI ou com Flask. Então, este é um curso muito importante, principalmente para você que quer aperfeiçoar cada vez mais seus conhecimentos no mundo de Back-end com Python.
Laís: No curso anterior, implementamos um projeto relacionado a restaurantes: cadastramos, listamos os restaurantes e também fizemos a parte de alternar os estados, ou seja, ativar e desativar restaurantes. Agora, precisamos implementar outro ponto do projeto, que é a questão do cardápio, de entrar no restaurante e inserir as informações dele.
Guilherme: Pensando na forma como estamos elaborando o nosso projeto e utilizando o paradigma de orientação a objeto, o objetivo deste curso é aprofundar ainda mais nesse conceito de orientação a objeto.
Com o VS Code aberto, se clicarmos na lista de modelos na lateral esquerda, veremos que temos dois arquivos: avaliacao.py
e restaurante.py
. Agora, precisamos tratar os itens que esse restaurante tem. Para organizar melhor nosso código, vamos criar uma pasta para manter somente as informações do cardápio.
Laís: Este é o projeto do curso anterior. Vamos disponibilizar para vocês no tópico Preparando Ambiente, caso você não tenha acesso no momento.
Em uma nova pasta, dentro da pasta de modelos onde estamos criando todas as nossas classes, vamos criar uma classe chamada cardapio
. Acredito que faz sentido começarmos com a base, um item do cardápio para generalizar tudo.
Vamos criar um novo arquivo dentro da classe cardapio
chamado item_cardápio.py
. Dentro desse arquivo, vamos criar uma classe chamada ItemCardapio
. A primeira coisa que queremos criar em uma classe, queremos ter definidos os parâmetros dessa classe, é um construtor com as informações base dela. Então, a primeira coisa que temos que fazer é o def __init__()
. Quais são os parâmetros que precisamos colocar nesse __init__
?
Guilherme: Primeiro, todo item que vamos criar, queremos passar o próprio objeto que está instanciando essa classe. Então, de primeira, temos que lembrar do self
. Podemos dizer que todo item do cardápio, independente de que tipo ele for, precisa ter um nome e precisa ter um preço. Então, podemos colocar um nome e um preço também.
Laís: Estamos criando essa classe e qualquer tipo de item que podemos inserir no cardápio, seja uma sobremesa, uma bebida, um prato, terá que, obrigatoriamente, ter o nome e o preço dessa informação. E aí, dentro dele, podemos colocar a associação, já que vamos receber de fora. Então, self.nome
será igual a nome e self.preço
será igual ao preço.
Guilherme: Acredito que podemos manter aqueles padrões que utilizamos nos nossos cursos de colocar o underline antes, para indicar para quem for usar essas classes e dizer: "tenha cuidado na forma como você vai utilizar esses valores porque eles são exclusivos do item cardápio".
class ItemCardapio:
def __init__(self, nome, preco):
self._nome = nome
self._preco = preco
Resumimos a organização do código, como podemos dividir os nossos arquivos, as nossas classes. Acho que podemos criar as nossas classes. Vamos começar com duas classes?
Vamos criar primeiro uma classe nova dentro da pasta de cardapio
chamada prato.py
. A classe Prato
também vai ter um construtor def __init__
, e também vamos passar o próprio objeto, self
, como primeiro argumento. Queremos o nome
, o preço (preco
). E podemos dizer que o prato vai ter uma descrição.
Laís: Para não dar erro, vou inserir pass
logo abaixo do def __init__
.
class Prato:
def __init__(self, nome, preco, descricao):
pass
Guilherme: Vamos criar uma outra classe também chamada bebida.py
. Aqui você pode usar a ideia de classe que quiser. Quer criar uma classe para sobremesa, uma classe para promoções, itens com desconto, enfim.
Laís: Lembrando que, por questão de organização, toda classe que for do cardápio, estamos colocando dentro da pasta cardapio
, que está na pasta modelos
, onde estão todas as nossas classes.
A classe Bebida
que vamos criar, vai ter que ter um construtor. Esse construtor, vamos passar as informações def __init__
, self
, e as informações de nome, preço, que falamos que obrigatoriamente todo item vai ter que ter. E também uma informação como tamanho
, por exemplo. Se adicionarmos o tamanho, já terá as informações necessárias.
Mas percebam que tanto a classe Prato
quanto a classe Bebida
têm as informações básicas que falamos anteriormente, que é de nome e preço. E essas informações no nosso arquivo de item_cardapio
, está dentro da nossa classe ItemCardapio
.
Guilherme: Ainda não existe uma associação do Prato
e da Bebida
com essa classe ItemCardapio
. Queremos que o ItemCardapio
seja a classe principal, como se fosse a "classe mãe" que vai dizer: "olha, todas as outras classes dependem da forma como eu vou me comportar, dependem dos meus atributos".
Vamos entender no próximo vídeo como esse paradigma, extremamente importante, não só para o Python, mas para diversas linguagens de programação, funciona. Vamos integrar uma classe a uma classe mãe.
Guilherme: O desafio agora é garantir que todas as classes, seja de bebida, prato ou sobremesa, herdem os comportamentos e atributos que nós temos na classe ItemCardapio
. Atualmente, não possuímos nenhum comportamento, apenas dois atributos: nome e preço.
O objetivo é que todos os itens tenham, no mínimo, um nome e um preço.
Vamos começar com a classe de prato?
Na classe Prato
, a primeira coisa que precisamos fazer para indicar que ela herda informações e atributos da classe ItemCardapio
é importá-la. Nós podemos usar o comando import
vistos nos cursos passados:
from modelos.cardapio.item_cardapio import ItemCardapio
Para indicar que o prato
é uma subclasse do ItemCardapio
, escrevemos class Prato(ItemCardapio):
. Com essa linha, estamos dizendo que a classe Prato
herda métodos e atributos de outra classe. Assim, dentro da classe Prato
, teremos informações que podemos usar e ações que podemos realizar que são oriundas de outra classe.
Para usar essas informações, vamos substituir pass
por super().__init__(nome, preco)
. O que está acontecendo aqui? A classe Prato
está usando as informações e os atributos da classe ItemCardapio
. Sempre que utilizamos a palavra super
, estamos acessando informações de outra classe, nesse caso, da classe ItemCardapio
.
No entanto, temos um ponto interessante: a descrição não é da classe ItemCardapio
, é referente ao prato. Assim, quando herdamos comportamentos e atributos de outra classe, não ficamos presos a usar apenas aquelas informações.
Laís: Podemos criar, da mesma maneira que criamos em qualquer outra classe, o atributo self.descrição
e atribuir a ele o valor de descrição que estamos passando.
Estamos aproveitando as coisas da nossa classe base (também chamada de classe mãe ou pai) e também podemos criar o que quisermos. Não somos obrigados a ficar apenas com aquelas informações do ItemCardapio
.
from modelos.cardapio.item_cardapio import ItemCardapio
class Prato(ItemCardapio):
def __init__(self, nome, preco, descricao):
super().__init__ (nome, preco)
self.descricao = descricao
Guilherme: A principal vantagem de criar informações de uma classe que queremos usar em outras classes é que conseguimos manter um padrão, uma linha de raciocínio para todas as outras classes.
Por exemplo, na classe Bebida
, também faremos um import
na primeira linha:
from modelos.cardapio.item_cardapio import ItemCardapio
Laís: Da mesma forma que fizemos com a classe Prato
, vamos fazer com a classe Bebida
:
class Bebida(ItemCardapio):
def __init__(self, nome, preco, tamanho):
super().__init__(nome, preco)
self.tamanho = tamanho
Nesse caso, substituímos pass
por super().__init__(nome, preço)
e criamos nosso próprio atributo tamanho
.
Guilherme: Esse conceito que estamos vendo agora na programação se chama herança. Ele se refere à capacidade de uma classe herdar características de uma classe base, mas também adicionar ou modificar essas características conforme necessário.
O curso Python: avance na Orientação a Objetos e consuma API possui 113 minutos de vídeos, em um total de 47 atividades. Gostou? Conheça nossos outros cursos de Python em Programação, ou leia nossos artigos de Programação.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.