Buenas Prácticas de Python Orientado a Objetos
Python no es Java: inclínate hacia objetos simples, funciones y protocolos en lugar de jerarquías de herencia profundas. Estas reglas mantienen el código OO "pythónico" y testeable.
Busca en todas las páginas de la documentación
Python no es Java: inclínate hacia objetos simples, funciones y protocolos en lugar de jerarquías de herencia profundas. Estas reglas mantienen el código OO "pythónico" y testeable.
mypy y Pydantic en los bordes del sistema.@dataclass para registros de datos; añade métodos solo cuando el comportamiento sea intrínseco. No todos los diccionarios necesitan una clase.tiene-un) sobre la herencia (es-un) más allá de un nivel. Inyecta colaboradores en __init__.Enum/StrEnum en lugar de constantes de cadena. match exhaustivo y prevención de errores tipográficos.super().__init__ en cadenas de herencia múltiple cooperativas. Las cadenas rotas omiten la inicialización.Protocol o ABC solo cuando existan implementaciones múltiples. YAGNI para implementación única.@classmethod para constructores alternativos. No patrones de __init__ sobrecargados._. Las propiedades exponen atributos estables sobre campos brutos.__eq__ y __hash__ para objetos de valor usados en conjuntos/diccionarios. O usa una clase dataclass con frozen=True.dataclass siguen siendo mutables.__post_init__ o setters. Falla rápido en la construcción.NotImplemented de __eq__ para tipos desconocidos. Deja que el otro operando intente la comparación inversa.__init__.__init_subclass__ para hooks de registro. No metaclasses personalizadas.__init__ simple.__slots__ solo con presión de memoria medida. Acepta las restricciones de herencia.+ sorprendente perjudica a los lectores.dataclass simples en el interior. Separación de transporte y dominio.Puntos de extensión de frameworks, mixins pequeños, polimorfismo de subtipos real con pocos niveles.
Clase dataclass en el núcleo del dominio; Pydantic donde se requiera validación de JSON/esquema.
No, los módulos de funciones son "pythónicos". Clases cuando el estado + comportamiento se agrupan de forma natural.
Protocolo para tipos de terceros estructurales; ABC cuando controlas la herencia y quieres guardas de instanciación.
Sin máximo fijo: si la clase se desplaza sin fin, divide por responsabilidad o extrae ayudantes.
El __name mangling es raro en código de aplicación; la convención de un solo _ es suficiente.
class MyDict(dict) con moderación: a menudo se envuelve o compone en su lugar para APIs más claras.
Mantén las filas ORM anémicas separadas del dominio enriquecido cuando la complejidad crezca: capa anti-corrupción.
Construye con campos mínimos; usa replace() para variantes congeladas en pruebas.
Herencia profunda que reemplaza funciones simples: refactoriza a composición y protocolos.
super y mixinsdataclass - patrón de registroVersiones de pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 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+, y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026