A programação em Python é conhecida por sua simplicidade e legibilidade, tornando-se uma escolha popular entre desenvolvedores iniciantes e experientes. Um conceito fundamental que você encontrará é o de classes no Python.
As classes desempenham um papel importante e permitem aos desenvolvedores criar estruturas de dados personalizadas e sistemas modulares.
Ao dominar o uso de classes no Python, você será capaz de criar aplicativos mais eficientes e escaláveis, tirando proveito dos recursos avançados da linguagem.
Neste artigo, mergulharemos no mundo das classes e exploraremos como elas podem ser usadas para melhorar a qualidade e a manutenção do seu código.
Preparado para elevar suas habilidades em Python? Vamos começar!
Caso prefira, temos essa explicação em formato de vídeo, basta assistir o vídeo abaixo, ou acessar o nosso Canal do YouTube para mais vídeos!
Vamos começar conceituando e exemplificando como você poderá criar sua primeira classe no Python.
Entender o conceito de classes é fundamental para dominar a programação orientada a objetos. Uma classe é um modelo ou blueprint que descreve os atributos (variáveis) e comportamentos (métodos) comuns a um grupo de objetos relacionados.
Em outras palavras, ela representa um conjunto de objetos com características e ações semelhantes.
No contexto da orientação a objetos, uma classe funciona como uma base para criar instâncias, chamadas de objetos. Cada objeto criado a partir de uma classe possui os atributos e métodos definidos pela classe, mas com valores e estados específicos.
Por exemplo, se tivermos uma classe chamada “Carro”, poderemos criar objetos como “Carro1”, “Carro2” e “Carro3”, cada um com suas próprias propriedades, como marca, modelo e cor, e comportamentos, como acelerar e frear.
A vantagem de utilizar classes na programação é a reutilização de código e a organização estrutural do projeto. Ao agrupar atributos e métodos relacionados em uma única classe, você promove a modularidade do código, facilitando a manutenção e a expansão do projeto.
Além disso, a orientação a objetos permite a criação de hierarquias de classes através de herança e polimorfismo, aumentando a flexibilidade e a eficiência do código.
Para a utilização das classes no Python nós vamos utilizar a programação orientada a objetos, que é um pouco diferente do que você está acostumado.
Então vamos dividir nossa programação em duas partes, na primeira vamos fazer a criação de objetos em Python que são as nossas classes.
E na segunda parte do código é que nós vamos utilizar essas classes para fazer o que quer ou precisa fazer no código.
Uma classe dentro do Python nada mais é do que um Objeto, então vamos utilizar um exemplo para que fique um pouco mais claro.
Pense agora em um controle remoto de televisão, ele tem algumas características e algumas funções.
As características vão ser a cor do controle, o formato, largura, altura, comprimento, peso…
Outra coisa que esse controle vai ter são métodos, ou seja, ele vai conseguir fazer alguma “ação”. O botão de mudar canal, por exemplo, seria um método de alterar canal.
Em um controle vamos ter um método para alterar o volume, alterar o canal, entrar na Netflix, ligar a TV…
Com isso você já deve ter imaginado que nós não vamos querer criar um código que executa os comandos de um controle e pronto.
O que nós queremos é criar esse objeto para que as pessoas consigam utilizá-lo, então não vamos apenas rodar o código do controle, mas teríamos uma “criação virtual” dele (para facilitar o exemplo).
Então ao criar esse controle você vai querer que quando alguém acesse ele, que ela possa utilizar o método de aumentar volume ou trocar de canal, mas somente quando a pessoa decidir usar o método.
O que é diferente de um código simples que vai rodar tudo na sequência.
Para que você entenda melhor isso, temos um exemplo apenas com textos para exemplificar o que foi explicado até agora.
class ControleRemoto:
caracteristicas:
- cor
- altura
- profundidade
- largura
métodos do controle remoto:
- passar de canal
- mexer no voulme
- abrir a Netflix
- desligar a tv
Então temos as características do objeto e temos os métodos desse objeto, só que agora precisamos passar isso para código dentro do Python.
Sempre que criar uma classe você vai ter que criar a função __init__ (com 2 underlines no início e no fim) que é a função para iniciar essa classe, ou seja, vai passar todas as características que precisa para criar esse objeto.
class ControleRemoto:
def __init__(self):
cor = ""
altura = ""
profundidade = ""
largura = ""
Então para que esse controle exista, ele precisa dessas características.
Dentro do editor de Python PyCharm você vai notar que automaticamente ele já preenche dentro do parêntese do __init__ o texto self.
E o que é esse self? Na verdade, ele faz referência a classe que foi criada, então como ele está dentro da classe ControleRemoto ele faz referência ao próprio controle.
class ControleRemoto:
def __init__(self, cor, altura, profundidade, largura):
cor = "preto"
altura = "10cm"
profundidade = "2cm"
largura = "2cm"
Antes de explicar o self, vamos adicionar mais alguns elementos dentro da inicialização do nosso objeto.
Isso é feito para caso você queira utilizar esse objeto mais de uma vez só que com características diferentes.
Isso quer dizer que sempre que utilizar esse objeto você será obrigado a passar todos esses parâmetros, então vai poder criar 2 controles com o mesmo objeto só que com essas características diferentes.
class ControleRemoto:
def __init__(self, cor, altura, profundidade, largura):
cor = "preto"
altura = "10cm"
profundidade = "2cm"
largura = "2cm"
# métodos do controle remoto:
# - passar de canal
# - mexer no voulme
# - abrir a Netflix
# - desligar a tv
controle_remoto = ControleRemoto("preto", "10cm", "2cm", "2cm")
controle_remoto2 = ControleRemoto("cinza", "10cm", "2cm", "2cm")
Então aqui teríamos os 2 controles já com características diferentes, então você vai poder personalizar eles apenas alterando esses parâmetros.
class ControleRemoto:
def __init__(self, cor, altura, profundidade, largura):
self.cor = cor
self.altura = altura
self.profundidade = profundidade
self.largura = largura
Agora vamos voltar ao self. Então quando criamos uma classe nós colocamos a estrutura dessa forma, pois assim nós estamos fazendo referência a uma característica do controle remoto e não uma variável qualquer dentro do código.
Isso fica mais claro quando você escreve, por exemplo, print(controle_remoto.cor), ele vai retornar a cor desse controle remoto, pois quando atribuímos o self.cor você pode utilizar essas características depois do self no seu objeto.
Então pode obter a altura dele com controle_remoto.altura e assim por diante.
IMPORTANTE: Vale lembrar que isso é diferente de colocar, por exemplo, que cor = “preto” como tínhamos feito anteriormente, pois isso é apenas uma variável e não uma característica da classe.
Então esse self é muito importante, pois ele atribui a característica a classe (ao objeto), e com isso você consegue depois buscar essas informações de forma mais fácil.
Um outro exemplo prático de classes no Python que pode ficar mais fácil de entender essa parte é se você criar um objeto cliente.
Então você vai criar uma classe de cliente que tem nome, telefone, endereço. Agora imagine que você criou 3 instâncias de clientes: cliente1, cliente2 e cliente3.
Se quiser descobrir o telefone do cliente2 bastaria escrever cliente2.telefone, porque você já atribuiu a característica de telefone a classe cliente e ao inicializar cada classe você informou esse telefone.
Então além de te dar uma maior praticidade dentro do código você fica com as informações mais organizadas e mais fáceis de serem acessadas.
# vamos criar uma classe para Clientes da Netflix
clas Cliente:
def __init__(self, nome, email, plano):
self.nome = nome
self.email = email
lista_planos = ["basic", "premium"]
if plano in lista_planos:
self.plano = plano
else:
raise Exception("Plano inválido")
cliente = Cliente("Lira", "[email protected]", "blabla")
print(cliente.nome)
Aqui temos mais um exemplo para que isso tudo fique mais claro. Aqui temos a criação da classe cliente com as informações desse cliente: nome, e-mail e o plano desse cliente.
Então sempre que formos criar uma instância (que é a inicialização de uma classe) nós vamos ter que passar os parâmetros que estão depois do self.
Isso é obrigatório, então já vamos passar o nome, e-mail e esse plano para “cadastrar” o cliente.
Novamente você vai poder fazer o cliente.nome, por exemplo, para obter o nome desse cliente que foi cadastrado.
Herança é um dos conceitos cruciais da programação orientada a objetos e possibilita que uma classe herde atributos e métodos de outra classe.
No Python, a herança é fácil de implementar e promove a reutilização de código e a modularidade. Aqui está um guia simples sobre como criar herança em Python:
Primeiro, precisamos criar uma classe base (também conhecida como superclasse ou classe pai) que conterá atributos e métodos comuns aos objetos relacionados. Por exemplo, vamos criar uma classe chamada Animal.
class Animal:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def falar(self):
print(f"O {self.nome} está falando.")
Em seguida, criaremos uma classe derivada (também conhecida como subclasse ou classe filha) que herda atributos e métodos da classe base. Para fazer isso, basta colocar o nome da classe base entre parênteses após o nome da classe derivada.
Por exemplo, vamos criar uma classe Cachorro que herda da classe Animal.
class Cachorro(Animal):
def __init__(self, nome, idade, raca):
super().__init__(nome, idade)
self.raca = raca
def latir(self):
print(f"O {self.nome} está latindo.")
Neste exemplo, usamos a função super() para chamar o método __init__ da classe base e passamos os parâmetros nome e idade.
Isso garante que os atributos da classe base sejam inicializados corretamente. Além disso, adicionamos um novo atributo raca e um novo método latir() à classe Cachorro.
Agora que temos nossas classes base e derivada, podemos criar objetos e utilizar a herança.
# Criando um objeto da classe Cachorro
meu_cachorro = Cachorro("Bolinha", 3, "Labrador")
# Acessando atributos e métodos da classe base
print(meu_cachorro.nome) # Imprime: Bolinha
print(meu_cachorro.idade) # Imprime: 3
meu_cachorro.falar() # Imprime: O Bolinha está falando.
# Acessando atributos e métodos da classe derivada
print(meu_cachorro.raca) # Imprime: Labrador
meu_cachorro.latir() # Imprime: O Bolinha está latindo.
Desta forma, a classe Cachorro herda atributos e métodos da classe Animal e também possui seus próprios atributos e métodos específicos. A herança em Python permite criar hierarquias de classes e promove o reuso de código.
Aprenda mais com nosso curso de Python!
Nessa aula eu quis te mostrar uma introdução às Classes no Python para deixar seus códigos ainda melhores.
Principalmente quando estiver criando um código maior e mais complexo, pois vai poder criar essas classes e utilizá-las ao longo do código.
Então, sempre que precisar utilizar essa classe vai poder criar uma instância com todas as suas características e métodos caso tenham algum.
Para acessar outras publicações de Python, clique aqui!
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.