Atributos e Métodos de uma Classe

Em Python, uma classe é uma estrutura fundamental da Programação Orientada a Objetos (POO). Permite-nos criar objetos que encapsulam dados e comportamentos relacionados. Nesta secção, vamos explorar os atributos e métodos de uma classe, elementos essenciais para definir as características e funcionalidades de uma classe.

Atributos de uma Classe

Os atributos são variáveis que armazenam os dados dos objetos. Há dois tipos principais de atributos em Python:

  • Atributos de Instância: Associados a uma instância específica da classe.
  • Atributos de Classe: Compartilhados por todas as instâncias da classe.
Exemplo: Definir Atributos de Instância
class Carro:
    def __init__(self, marca, modelo, ano):
        self.marca = marca
        self.modelo = modelo
        self.ano = ano

# Criar instâncias da classe Carro
carro1 = Carro('Toyota', 'Corolla', 2020)
carro2 = Carro('Honda', 'Civic', 2019)

print(carro1.marca)  # Output: Toyota
print(carro2.modelo) # Output: Civic

Neste exemplo, marca, modelo e ano são atributos de instância, definidos pelo método especial __init__.

Exemplo: Definir Atributos de Classe
class Carro:
    numero_de_rodas = 4  # Atributo de classe

    def __init__(self, marca, modelo, ano):
        self.marca = marca
        self.modelo = modelo
        self.ano = ano

# Criar instâncias da classe Carro
carro1 = Carro('Toyota', 'Corolla', 2020)
carro2 = Carro('Honda', 'Civic', 2019)

print(Carro.numero_de_rodas) # Output: 4
print(carro1.numero_de_rodas) # Output: 4

O atributo de classe numero_de_rodas é partilhado por todas as instâncias da classe Carro.

Métodos de uma Classe

Os métodos são funções definidas dentro de uma classe que definem os comportamentos dos objetos.

Método de Instância

Um método de instância é um método que atua sobre uma instância da classe.

class Carro:
    numero_de_rodas = 4

    def __init__(self, marca, modelo, ano):
        self.marca = marca
        self.modelo = modelo
        self.ano = ano
    
    def detalhes_do_carro(self):  # Método de instância
        return f"Marca: {self.marca}, Modelo: {self.modelo}, Ano: {self.ano}"

# Criar instâncias da classe Carro
carro1 = Carro('Toyota', 'Corolla', 2020)

print(carro1.detalhes_do_carro())  # Output: Marca: Toyota, Modelo: Corolla, Ano: 2020
Método de Classe

Utilizamos o decorador @classmethod para definir métodos de classe que atuam sobre a classe em si e não sobre uma instância específica.

class Carro:
    numero_de_rodas = 4

    def __init__(self, marca, modelo, ano):
        self.marca = marca
        self.modelo = modelo
        self.ano = ano
    
    def detalhes_do_carro(self):
        return f"Marca: {self.marca}, Modelo: {self.modelo}, Ano: {self.ano}"

    @classmethod
    def obter_numero_de_rodas(cls):
        return cls.numero_de_rodas

print(Carro.obter_numero_de_rodas())  # Output: 4
Método Estático

Métodos estáticos utilizam o decorador @staticmethod e não dependem nem da classe nem da instância.

class Carro:
    numero_de_rodas = 4

    def __init__(self, marca, modelo, ano):
        self.marca = marca
        self.modelo = modelo
        self.ano = ano
    
    def detalhes_do_carro(self):
        return f"Marca: {self.marca}, Modelo: {self.modelo}, Ano: {self.ano}"

    @classmethod
    def obter_numero_de_rodas(cls):
        return cls.numero_de_rodas
    
    @staticmethod
    def calcular_idade(ano):
        from datetime import datetime
        ano_atual = datetime.now().year
        return ano_atual - ano

idade_carro = Carro.calcular_idade(2010)
print(f"A idade do carro é: {idade_carro} anos")  # Output: A idade do carro é: 13 anos

Resumo

Nesta secção, aprendemos sobre os atributos e métodos de uma classe em Python:

  • Atributos de Instância: São específicos para cada instância de uma classe.
  • Atributos de Classe: São partilhados por todas as instâncias da classe.
  • Métodos de Instância: Funções que atuam sobre uma instância particular.
  • Métodos de Classe: Funções que atuam sobre a classe em geral.
  • Métodos Estáticos: Funções que não dependem da instância ou da classe, mas estão relacionadas ao conteúdo da classe.

Quiz

  1. O que distingue um atributo de instância de um atributo de classe?
  2. Como se define um método de classe em Python?
  3. Para que se utiliza o decorador @staticmethod?
  4. Escreva um exemplo de método de instância e explique o seu propósito.
  5. Qual é a função do método especial __init__ numa classe Python?

Respondendo a estas perguntas, verificarás o teu entendimento sobre os conceitos de atributos e métodos numa classe em Python. Boa sorte!

<< Instanciação de Objetos Índice Trabalhando com Atributos >>