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!