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
- O que distingue um atributo de instância de um atributo de classe?
- Como se define um método de classe em Python?
- Para que se utiliza o decorador
@staticmethod? - Escreva um exemplo de método de instância e explique o seu propósito.
- 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!