1.2: Introdução a Classes e Objetos em Python

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:

  1. Define uma classe "Livro" com três atributos: título, autor e ano.
  2. Cria pelo menos dois objetos da classe "Livro" com diferentes valores para os atributos.
  3. 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:

  1. Como se define uma classe em Python?
  2. O que significa instanciar um objeto?
  3. Como se acede um atributo de um objeto?
<< 1.1: Introdução à Program... Índice 1.3: Atributos e Métodos... >>