Python POO Intermediário
Classes e objetos
Em Python, uma classe é um molde que descreve o que um tipo de objeto tem (atributos) e o que ele faz (métodos). Um objeto (ou instância) é um exemplar concreto criado a partir dessa classe, com seus próprios valores. Por exemplo, a classe ContaBancaria define que toda conta tem titular e saldo, mas cada objeto conta guarda valores diferentes.
O método especial __init__ é o inicializador: ele roda automaticamente quando você cria um objeto e serve para definir os atributos iniciais. O primeiro parâmetro de todo método de instância é self, que representa o próprio objeto e dá acesso aos seus atributos e métodos.
Atributos de instância (definidos com self.nome) pertencem a cada objeto. Atributos de classe (definidos direto no corpo da classe) são compartilhados por todas as instâncias. Entender essa diferença evita bugs clássicos, como alterar um valor que deveria ser individual.
Pontos-chave
__init__é chamado automaticamente ao criar o objeto e inicializa atributos.selfé a referência ao objeto atual e deve ser o primeiro parâmetro dos métodos de instância.- Atributos de instância (
self.x) são individuais; atributos de classe são compartilhados. - Métodos são funções definidas dentro da classe que operam sobre
self. - Criar um objeto é chamar a classe como função:
obj = MinhaClasse(args).
class ContaBancaria:
# atributo de classe: compartilhado por todas as contas
banco = "Banco Python"
def __init__(self, titular, saldo=0.0):
# atributos de instância: individuais
self.titular = titular
self.saldo = saldo
def depositar(self, valor):
if valor <= 0:
raise ValueError("valor deve ser positivo")
self.saldo += valor
def sacar(self, valor):
if valor > self.saldo:
raise ValueError("saldo insuficiente")
self.saldo -= valor
def extrato(self):
return f"{self.titular}: R$ {self.saldo:.2f} ({self.banco})"
if __name__ == "__main__":
c1 = ContaBancaria("Ana", 100.0)
c2 = ContaBancaria("Bruno")
c1.depositar(50)
c1.sacar(30)
c2.depositar(20)
print(c1.extrato())
print(c2.extrato())
print("Atributo de classe:", ContaBancaria.banco)