Programação Orientada a Objetos em Python
A Programação Orientada a Objetos (POO) é uma das principais paradigmas da programação moderna. O Python oferece suporte completo à POO, tornando-se uma ferramenta poderosa tanto para iniciantes quanto para programadores profissionais.
A POO ajuda a modelar o mundo real, melhora a legibilidade do código, permite o reuso de componentes e gerencia a complexidade dos projetos. Os conceitos fundamentais da orientação a objetos são classes e objetos, além dos princípios básicos: herança, encapsulamento e polimorfismo.
Essa abordagem estrutura o programa como um conjunto de objetos que interagem entre si, onde cada objeto é uma instância de uma classe específica. Isso torna o código mais modular, compreensível e fácil de manter.
Fundamentos de Classes e Objetos em Python
Definição de Classe e Objeto
Uma classe é um modelo ou molde para criar objetos. Ela define a estrutura de dados e os métodos que estarão disponíveis para todos os objetos desse tipo.
Um objeto é uma instância concreta de uma classe, que possui seus próprios dados e pode executar as ações definidas na classe.
class Carro:
def dirigir(self):
print("O carro está andando")
meu_carro = Carro() # objeto (instância da classe)
meu_carro.dirigir()
No código acima, a classe Carro define o molde para criar objetos de carros. O método dirigir() descreve o comportamento disponível para todas as instâncias dessa classe.
Estrutura de uma Classe em Python
A estrutura básica de uma classe em Python é a seguinte:
class NomeDaClasse:
def __init__(self, argumentos):
self.propriedades = valores
def metodo(self):
ações
Os componentes importantes de uma classe incluem:
- init — o construtor da classe, chamado automaticamente ao criar um novo objeto
- self — parâmetro especial que representa a referência à instância atual do objeto
- Atributos — variáveis que armazenam os dados do objeto
- Métodos — funções definidas dentro da classe e associadas ao objeto
Criação e Uso de Classes
Exemplo Prático de Criação de Classe
Vamos criar a classe Pessoa, que modela uma pessoa:
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def saudacao(self):
print(f"Olá, meu nome é {self.nome}")
def obter_info(self):
return f"Nome: {self.nome}, Idade: {self.idade}"
p = Pessoa("Ana", 30)
p.saudacao()
print(p.obter_info())
Neste exemplo, o construtor init recebe os parâmetros nome e idade, que são salvos como atributos da instância. Os métodos saudacao() e obter_info() fornecem funcionalidades para trabalhar com os dados do objeto.
Criação de Instâncias de Classe
O processo de criar uma instância de classe em Python ocorre chamando a classe como se fosse uma função:
p1 = Pessoa("João", 25)
p2 = Pessoa("Maria", 28)
print(p1.nome) # João
print(p1.idade) # 25
print(p2.nome) # Maria
Cada chamada ao construtor da classe cria um novo objeto independente, com seus próprios atributos e estado.
Atributos em Classes Python
Atributos de Instância
Os atributos de instância são únicos para cada objeto. Eles são criados e inicializados no método init e podem ser alterados durante a execução do programa:
class Aluno:
def __init__(self, nome, nota):
self.nome = nome
self.nota = nota
def atualizar_nota(self, nova_nota):