Python/Orientação a Objetos/Classes e Objetos
Python⏱ ~2 min de leitura

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.

Exemplo.java
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")
💡 Dica pro

Use _ prefixo para indicar atributos "privados por convenção" e @property para acesso controlado sem getter/setter verboso.

Recompensa+40 XP+exercícios