Classes e Objetos
Classes, atributos e métodos
Classes em Python são definidas com class NomeDaClasse:. O método especial __init__ é o construtor — chamado automaticamente ao criar uma instância. self é sempre o primeiro parâmetro dos métodos de instância e referencia o próprio objeto.
Atributos de instância são criados dentro de __init__ com self.atributo = valor. Atributos de classe são definidos diretamente no corpo da classe e são compartilhados por todas as instâncias.
@classmethod recebe cls (a própria classe) como primeiro argumento e é útil para factories. @staticmethod não recebe self nem cls — é essencialmente uma função namespace na classe. @property transforma um método em atributo calculado.
class ContaBancaria:
taxa_juros = 0.05 # atributo de classe
def __init__(self, titular, saldo=0):
self.titular = titular
self._saldo = saldo # _ = convenção "protegido"
@property
def saldo(self):
return self._saldo
def depositar(self, valor):
if valor > 0:
self._saldo += valor
def sacar(self, valor):
if 0 < valor <= self._saldo:
self._saldo -= valor
return True
return False
@classmethod
def criar_conta_poupanca(cls, titular):
return cls(titular, saldo=1000)
@staticmethod
def validar_cpf(cpf):
return len(cpf) == 11 and cpf.isdigit()
def __str__(self):
return f"Conta de {self.titular}: R$ {self._saldo:.2f}"
# Uso
conta = ContaBancaria("Maria", 500)
conta.depositar(200)
print(conta) # Conta de Maria: R$ 700.00
poupanca = ContaBancaria.criar_conta_poupanca("João")Use _ prefixo para indicar atributos "privados por convenção" e @property para acesso controlado sem getter/setter verboso.