Agora que já compreendes o que é a Programação Orientada a Objetos (POO), vamos explorar como definir classes e criar objetos em Python. As classes permitem criar estruturas que agrupam dados (atributos) e comportamentos (métodos). A partir dessas classes, podemos instanciar objetos, que são instâncias concretas dessas classes.
Objetivos
- Compreender o conceito de classes em Python e como defini-las.
- Aprender a instanciar objetos a partir de uma classe.
- Utilizar atributos e métodos para manipular objetos.
O que é uma Classe?
Uma classe é um modelo que define os atributos e métodos que um objeto desse tipo terá. Podes pensar numa classe como um "molde" ou "plano" para criar objetos. Quando defines uma classe, estás a definir os atributos (dados) que os objetos dessa classe terão, bem como os métodos (funções) que poderão ser aplicados a esses objetos.
Exemplo de Definição de uma Classe:
# Definir uma classe chamada "Carro"
class Carro:
pass # A palavra "pass" indica que a classe está vazia por enquanto
Aqui, criamos uma classe chamada Carro. A palavra pass significa que a classe ainda não tem nenhum conteúdo, mas podemos agora criar objetos dessa classe.
O que é um Objeto?
Um objeto é uma instância de uma classe. Quando criamos um objeto, estamos a criar uma "cópia" de uma classe com valores específicos para os seus atributos. Um objeto tem um estado (representado pelos seus atributos) e um comportamento (representado pelos seus métodos).
Imagina que a classe "Carro" é o molde que define o que um carro é (atributos como marca e modelo) e o que um carro pode fazer (métodos como acelerar e travar). Quando criamos um objeto da classe "Carro", estamos a criar um carro específico, com uma marca e um modelo definidos.
Exemplo de Instanciação de um Objeto:
# Definir uma classe "Carro"
class Carro:
pass
# Criar um objeto da classe Carro
meu_carro = Carro()
print(meu_carro) # Verificar o objeto criado
Neste exemplo, criamos um objeto meu_carro a partir da classe Carro. Quando imprimimos meu_carro, vemos que é uma instância da classe Carro.
Atributos e Métodos
Os objetos têm atributos, que são variáveis que guardam o estado do objeto, e métodos, que são funções associadas a esses objetos e que definem o comportamento do objeto.
Na POO, os atributos e métodos são definidos dentro das classes. Cada objeto criado a partir da classe terá os seus próprios valores de atributos, mas poderá partilhar os mesmos métodos.
Exemplo de Classe com Atributos e Métodos:
# Definir uma classe "Carro" com atributos e métodos
class Carro:
def __init__(self, marca, modelo, ano):
self.marca = marca
self.modelo = modelo
self.ano = ano
def acelerar(self):
print(f"O {self.marca} {self.modelo} está a acelerar.")
# Criar um objeto da classe Carro
meu_carro = Carro("Toyota", "Corolla", 2020)
# Aceder aos atributos do objeto
print(f"Marca: {meu_carro.marca}")
print(f"Modelo: {meu_carro.modelo}")
print(f"Ano: {meu_carro.ano}")
# Chamar o método acelerar
meu_carro.acelerar()
Neste exemplo, definimos a classe Carro com três atributos: marca, modelo e ano. O método __init__() é um método especial chamado quando criamos um novo objeto. Ele inicializa os atributos do objeto. Também criamos um método acelerar() que imprime uma mensagem personalizada para cada carro.
Instância vs. Classe
É importante distinguir uma classe de uma instância de uma classe. A classe é o modelo ou o molde, enquanto uma instância (ou objeto) é um exemplo concreto dessa classe. Podes criar múltiplos objetos a partir da mesma classe, e cada objeto terá os seus próprios valores para os atributos definidos na classe.
Exemplo de Múltiplas Instâncias:
# Criar duas instâncias da classe Carro
carro1 = Carro("Honda", "Civic", 2019)
carro2 = Carro("Ford", "Mustang", 2021)
# Aceder aos atributos de cada objeto
print(f"Carro 1: {carro1.marca} {carro1.modelo}, {carro1.ano}")
print(f"Carro 2: {carro2.marca} {carro2.modelo}, {carro2.ano}")
# Chamar o método acelerar para cada objeto
carro1.acelerar()
carro2.acelerar()
Aqui, criamos dois objetos, carro1 e carro2, da mesma classe Carro. Cada objeto tem valores diferentes para os seus atributos, mas ambos partilham o mesmo comportamento (o método acelerar()).
Exercício Prático
A empresa PyTalento pediu-te que desenvolvas uma classe "Livro" para gerir uma pequena biblioteca. O teu objetivo é criar uma classe que represente um livro, com atributos para o título, o autor e o ano de publicação. Depois, deves criar objetos a partir dessa classe e exibir os detalhes dos livros no ecrã.
Requisitos:
- Define uma classe "Livro" com três atributos: título, autor e ano.
- Cria pelo menos dois objetos da classe "Livro" com diferentes valores para os atributos.
- Imprime os detalhes de cada livro no ecrã, incluindo o título, o autor e o ano de publicação.
Exemplo de Código para Começares:
# Definir a classe Livro
class Livro:
def __init__(self, titulo, autor, ano):
self.titulo = titulo
self.autor = autor
self.ano = ano
# Criar objetos da classe Livro
livro1 = Livro("1984", "George Orwell", 1949)
livro2 = Livro("O Senhor dos Anéis", "J.R.R. Tolkien", 1954)
# Imprimir os detalhes dos livros
print(f"Título: {livro1.titulo}, Autor: {livro1.autor}, Ano: {livro1.ano}")
print(f"Título: {livro2.titulo}, Autor: {livro2.autor}, Ano: {livro2.ano}")
Quiz
Responde às seguintes perguntas para verificar o que aprendeste:
- Como se define uma classe em Python?
- O que significa instanciar um objeto?
- Como se acede um atributo de um objeto?