Blog

Postado em em 10 de maio de 2023

Classes no Python – Como Sair do Zero

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!

Classes no Python

Vamos começar conceituando e exemplificando como você poderá criar sua primeira classe no Python.

Definição – Classes 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.

Criando sua primeira classe

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 em Python: saiba como criar

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:

Definindo a classe base (superclasse ou classe pai)

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.")

Criando a classe derivada (subclasse ou classe filha):

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.

Instanciando objetos e utilizando a herança

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!

Conclusão – Classes no 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.

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer ter acesso a um Minicurso de Finanças no Excel de forma 100% gratuita? Preencha seu e-mail abaixo!