Boas Práticas de Python Orientado a Objetos
Python não é Java - incline-se para objetos simples, funções e protocolos em vez de hierarquias de herança profundas. Estas regras mantêm o código OO Pythonic e testável.
Busque em todas as páginas da documentação
Python não é Java - incline-se para objetos simples, funções e protocolos em vez de hierarquias de herança profundas. Estas regras mantêm o código OO Pythonic e testável.
@dataclass para registros de dados; adicione métodos apenas quando o comportamento for intrínseco. Nem todo dict precisa de uma classe.tem-um) em vez de herança (é-um) além de um nível. Injete colaboradores em __init__.Enum/StrEnum em vez de constantes de string. match exaustivo e prevenção de erros de digitação.int/str crus entre camadas.super().__init__ em cadeias de herança múltipla cooperativas. Cadeias quebradas pulam a inicialização.Protocol ou ABC apenas quando múltiplas implementações existirem. YAGNI para implementação única.@classmethod para construtores alternativos. Não padrões de __init__ sobrecarregados._. Propriedades expõem atributos estáveis sobre campos brutos.__eq__ e __hash__ para objetos de valor usados em conjuntos/dicionários. Ou use frozen=True dataclass.__post_init__ ou setters. Falhe rapidamente na construção.NotImplemented de __eq__ para tipos desconhecidos. Deixe o outro operando tentar a comparação reversa.__init__.__init_subclass__ para hooks de registro. Não metaclasses personalizadas.__init__ caso contrário.__slots__ apenas com pressão de memória medida. Aceite restrições de herança.+ surpreendente prejudica os leitores.Pontos de extensão de framework, mixins pequenos, polimorfismo de subtipo verdadeiro com poucos níveis.
dataclass no núcleo do domínio; Pydantic onde validação JSON/schema é necessária.
Não - módulos de funções são Pythonic. Classes quando estado + comportamento se agrupam naturalmente.
Protocolo para tipos de terceiros estruturais; ABC quando você controla a herança e deseja guardas de instanciação.
Sem máximo fixo - se a classe rolar infinitamente, divida por responsabilidade ou extraia helpers.
O mangling de __name é raro em código de aplicativo - a convenção de _ único é suficiente.
class MyDict(dict) com moderação - muitas vezes envolva ou componha em vez disso para APIs mais claras.
Mantenha linhas ORM anêmicas separadas do domínio rico quando a complexidade aumenta - camada anti-corrupção.
Construa com campos mínimos; use replace() para variantes congeladas em testes.
Herança profunda substituindo funções simples - refatore para composição e protocolos.
Versões de Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026