Python robusto

Book description

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

¿Te parece que tus proyectos Python son cada vez más grandes? ¿Sientes el dolor a medida que tu código base se expande y se hace más difícil de depurar y mantener? Python es un lenguaje fácil de aprender y utilizar, pero eso también significa que los sistemas pueden crecer rápidamente más allá de lo comprensible. Afortunadamente, Python tiene funciones que ayudan a los desarrolladores a superar los problemas de mantenimiento.

En este práctico libro, el autor Patrick Viafore te muestra cómo utilizar al máximo el sistema de tipos de Python. Verás los tipos definidos por el usuario, como clases y enums, y el sistema de sugerencias de tipos de Python. También aprenderás a hacer Python extensible y a utilizar una estrategia de pruebas exhaustiva como red de seguridad. Con estos consejos y técnicas, escribirás un código más claro y fácil de mantener.

  • Aprende por qué los tipos son esenciales en los ecosistemas de desarrollo modernos
  • Comprende cómo las opciones tipográficas como clases, diccionarios y enums reflejan intenciones específicas.
  • Haz que Python sea extensible en el futuro sin sobrecargarlo
  • Utiliza herramientas populares de Python para aumentar la seguridad y robustez de tu código base.
  • Evalúa el código actual para detectar errores comunes de mantenimiento
  • Construye una red de seguridad en torno a tu código con linters y pruebas

Table of contents

  1. Prefacio
    1. Quién debería leer este libro
    2. Acerca de este libro
    3. Convenciones utilizadas en este libro
    4. Utilizar ejemplos de código
    5. Aprendizaje en línea O'Reilly
    6. Cómo contactar con nosotros
    7. Agradecimientos
  2. 1. Introducción al Python robusto
    1. Robustez
      1. ¿Por qué es importante la robustez?
    2. ¿Cuál es tu intención?
      1. Comunicación asíncrona
    3. Ejemplos de intención en Python
      1. Colecciones
      2. Iteración
      3. Ley de la menor sorpresa
    4. Reflexiones finales
  3. I. Anotar tu código con tipos
  4. 2. Introducción a los tipos de Python
    1. ¿Qué hay en un Tipo?
      1. Representación mecánica
      2. Representación semántica
    2. Sistemas de mecanografía
      1. Fuerte contra débil
      2. Dinámico frente a estático
      3. Mecanografía de pato
    3. Reflexiones finales
  5. 3. Anotaciones de tipo
    1. ¿Qué son las anotaciones de tipo?
    2. Ventajas de las anotaciones de tipo
      1. Autocompletar
      2. Correctores tipográficos
      3. Ejercicio: Localiza el bicho
    3. Cuándo utilizar anotaciones de tipo
    4. Reflexiones finales
  6. 4. Tipos de restricción
    1. Tipo opcional
    2. Tipos de sindicatos
      1. Tipos de producto y suma
    3. Tipos literales
    4. Tipos anotados
    5. NuevoTipo
    6. Tipos finales
    7. Reflexiones finales
  7. 5. Tipos de recogida
    1. Anotar colecciones
    2. Colecciones homogéneas frente a heterogéneas
    3. TypedDict
    4. Crear nuevas colecciones
      1. Genéricos
      2. Modificar tipos existentes
      3. Tan fácil como el ABC
    5. Reflexiones finales
  8. 6. Personalizar tu Typechecker
    1. Configurar tu Typechecker
      1. Configurar mypy
      2. Informes de Mypy
      3. Acelerar mypy
    2. Correctores tipográficos alternativos
      1. Pira
      2. Pyright
    3. Reflexiones finales
  9. 7. Adopción práctica de la verificación tipográfica
    1. Compromisos
    2. Alcanzar el equilibrio antes
      1. Encuentra tus puntos de dolor
      2. Dirigir el código estratégicamente
      3. Apóyate en tu utillaje
    3. Reflexiones finales
  10. II. Definir tus propios tipos
  11. 8. Tipos definidos por el usuario: Enums
    1. Tipos definidos por el usuario
    2. Enumeraciones
      1. Enum
      2. Cuándo no utilizar
    3. Uso avanzado
      1. Valores automáticos
      2. Banderas
      3. Conversión de enteros
      4. Único
    4. Reflexiones finales
  12. 9. Tipos definidos por el usuario: Clases de datos
    1. Clases de datos en acción
    2. Utilización
      1. Conversión de cadenas
      2. Igualdad
      3. Comparación relacional
      4. Inmutabilidad
    3. Comparación con otros tipos
      1. Clases de datos frente a diccionarios
      2. Clases de datos frente a TypedDict
      3. Clases de datos frente a namedtuple
    4. Reflexiones finales
  13. 10. Tipos definidos por el usuario: Clases
    1. Anatomía de la clase
      1. Inicialización de clases
    2. Invariantes
      1. Evitar invariantes rotas
      2. ¿Por qué son beneficiosas las invariantes?
      3. Comunicar invariantes
      4. Consumir tu clase
      5. ¿Y los mantenedores?
    3. Encapsulación y mantenimiento de invariantes
      1. Encapsul-qué, ¿ahora?
      2. Proteger el acceso a los datos
      3. Operaciones
    4. Reflexiones finales
  14. 11. Definir tus interfaces
    1. Diseño de interfaz natural
      1. Pensar como un usuario
    2. Interacciones naturales
      1. Interfaces naturales en acción
      2. Métodos mágicos
      3. Gestores de contexto
    3. Reflexiones finales
  15. 12. Subtipado
    1. Herencia
    2. Sustituibilidad
    3. Consideraciones sobre el diseño
      1. Composición
    4. Reflexiones finales
  16. 13. Protocolos
    1. Tensión entre sistemas tipográficos
      1. Deja el tipo en blanco o utiliza cualquiera
      2. Utiliza una Unión
      3. Utiliza la herencia
      4. Utiliza Mixins
    2. Protocolos
      1. Definir un protocolo
    3. Uso avanzado
      1. Protocolos compuestos
      2. Protocolos verificables en tiempo de ejecución
      3. Módulos que satisfacen los protocolos
    4. Reflexiones finales
  17. 14. Comprobación en tiempo de ejecución con pydantic
    1. Configuración dinámica
    2. pydantic
      1. Validadores
      2. Validación frente a análisis sintáctico
    3. Reflexiones finales
  18. III. Python extensible
  19. 15. Extensibilidad
    1. ¿Qué es la extensibilidad?
      1. El rediseño
    2. Principio Abierto-Cerrado
      1. Detectar infracciones de la OCP
      2. Inconvenientes
    3. Reflexiones finales
  20. 16. Dependencias
    1. Relaciones
    2. Tipos de dependencias
      1. Dependencias físicas
      2. Dependencias lógicas
      3. Dependencias temporales
    3. Visualizar tus dependencias
      1. Visualizar paquetes
      2. Visualizar las importaciones
      3. Visualizar las llamadas a funciones
      4. Interpretar tu gráfico de dependencia
    4. Reflexiones finales
  21. 17. Composibilidad
    1. Composibilidad
    2. Política frente a mecanismos
    3. Componer a pequeña escala
      1. Funciones de composición
      2. Componer algoritmos
    4. Reflexiones finales
  22. 18. Arquitectura dirigida por eventos
    1. Cómo funciona
      1. Inconvenientes
    2. Eventos sencillos
      1. Utilizar un corredor de mensajes
      2. El patrón del observador
    3. Eventos en streaming
    4. Reflexiones finales
  23. 19. Python enchufable
    1. El patrón del método de plantillas
    2. El patrón estratégico
    3. Arquitecturas Plug-in
    4. Reflexiones finales
  24. IV. Construir una red de seguridad
  25. 20. Análisis estático
    1. Pelusa
      1. Cómo escribir tu propio plugin de Pylint
      2. Descomponer el Plug-in
    2. Otros analizadores estáticos
      1. Comprobadores de complejidad
      2. Análisis de seguridad
    3. Reflexiones finales
  26. 21. Estrategia de pruebas
    1. Definir tu estrategia de pruebas
      1. ¿Qué es un test?
    2. Reducir el coste de las pruebas
      1. Pruebas AAA
    3. Reflexiones finales
  27. 22. Pruebas de aceptación
    1. Desarrollo orientado al comportamiento
      1. El lenguaje Gherkin
      2. Especificaciones ejecutables
    2. Características adicionales del comportamiento
      1. Pasos parametrizados
      2. Requisitos basados en tablas
      3. Coincidencia de pasos
      4. Personalizar el ciclo de vida de las pruebas
      5. Utilizar etiquetas para ejecutar pruebas selectivamente
      6. Generación de informes
    3. Reflexiones finales
  28. 23. Pruebas basadas en propiedades
    1. Pruebas basadas en propiedades con hipótesis
      1. La magia de las hipótesis
      2. Contraste con las pruebas tradicionales
    2. Sacar el máximo partido a las hipótesis
      1. Estrategias de hipótesis
      2. Generar algoritmos
    3. Reflexiones finales
  29. 24. Pruebas de mutación
    1. ¿Qué es la prueba de mutaciones?
    2. Pruebas de mutación con mutmut
      1. Arreglar mutantes
      2. Informes de pruebas de mutaciones
    3. Adoptar las pruebas de mutaciones
      1. La falacia de la cobertura (y otras métricas)
    4. Reflexiones finales
  30. Índice
  31. Sobre el autor

Product information

  • Title: Python robusto
  • Author(s): Patrick Viafore
  • Release date: September 2024
  • Publisher(s): O'Reilly Media, Inc.
  • ISBN: 9781098188108