Alex Martelli es Senior Staff Engineer (anteriormente Über Tech Lead) en Google, es uno de los pythonistas de largo recorrido de la PSF, inventor del término duck-typing, y frecuente orador en conferencias de Python donde ha dado multitud de charlas muy instructivas.
Recientemente he estado viendo unas cuantas de sus charlas, en concreto las que tratan sobre patrones de diseño de software (Software Design Patterns) para el lenguaje de programación Python.
Aún me acuerdo cuando en H4ckademy un compañero, que se estaba leyendo el libro Head First Design Patterns, me pidió ayuda para implementar una factoría en Python, ya que él apenas conocía el lenguaje. Estaba tratando de hacer la implementación ‘de libro’ (Java) del patrón: con una clase factoría que hay que instanciar y donde después has de invocar a un método de esa instancia para obtener el nuevo objeto. Cuando ví el código le dije: «¿Por que no usas una simple función?».
Y es que la implementación de diversos patrones de diseño de software en Python, por las características del lenguaje, difiere bastante de la implementación de la presente en los textos clásicos sobre patrones como el Gang of 4, que están originalmente escritos para lenguajes de tipado estático como C++ o Java. Como bien dice Alex Martelli en una de sus charlas, muchos de los patrones presentes en esos textos clásicos sirven principalmente para evitar las limitaciones impuestas por un sistema de tipado estático, y en muchos otros casos son patrones que ya se encuentran integrados dentro del propio lenguaje, por lo que su aplicación en Python es relativa. Aún así hay muchos patrones cuya vigencia se mantiene, especialmente cuando usamos orientación a objetos.
El objetivo de este blogpost es recoger esas charlas de Alex Martelli sobre patrones (más otra de Brandon Rhodes), que tienen una ingente cantidad de conocimiento – súper útil – sobre como usar patrones de diseño de software en Python, y en general sobre como programar mejor. En total son unas 4 horas y media de vídeo.
Nota: Todas las charlas están en inglés (hora de aprender).
Alex Martelli: Python Design Patterns
Alex nos da un recorrido general sobre cual es el origen y que son los patrones de diseño de software, y nos muestra ejemplos de los patrones más aplicables en Python.
- Vídeo Parte 1: https://www.youtube.com/watch?v=4KZx8bATBFs
- Vídeo Parte 2: https://www.youtube.com/watch?v=cOcpUCUsn_o
- Transparencias: http://www.aleax.it/goo_pydp.pdf
Alex Martelli: Callback Patterns and Idioms in Python
En este caso Alex nos habla sobre patrones para manejar callbacks y eventos.
- Vídeo: https://www.youtube.com/watch?v=XpW-sRVKoao
- Transparencias: http://www.aleax.it/cback_sfp12.pdf
Alex Martelli: Modern Python patterns and idioms
En esta charla una parte está dedicada a patrones de arquitectura y la otra parte a idioms, o maneras de expresar una operación en el lenguaje. También muestra como dichos idioms, que al final son un patrón (aunque no sea de diseño), han evolucionado según se añadía nuevas funcionalidades al lenguaje Python.
- Vídeo: https://www.youtube.com/watch?v=LeuChRCByZc
- Transparencias: http://www.aleax.it/pyconit15_mppi_en.pdf
Brandon Rhodes: Python Design Patterns 1
La charla de Brandon se origina como respuesta a alguien que comentaba que no eran necesarios los patrones de diseño de software en Python. En general hace un recorrido por los patrones presentes en el Gang of Four haciendo hincapié sobre su uso/necesidad/implementación (o no) en Python.
- Vídeo: http://pyvideo.org/video/1369/python-design-patterns-1 (salta hasta el minuto 17:25 ya que el vídeo está mal y recomienza en ese punto)
- Transparencias: http://rhodesmill.org/brandon/talks/#design-patterns-1
Bola Extra: The Observer Pattern in Python
Por último, un buen ejemplo de como implementar el patrón Observer en diferentes aproximaciones, usando cada vez más la flexibilidad de Python. La evolución que sigue a lo largo del vídeo es un buen ejemplo de como en Python las cosas se pueden hacer de forma diferente.
Actualización (2018-04):
Brandon Rhodes ha sacado una web al estilo del PYMOTW donde poco a poco va a explicar los patrones del Gang of Four en Python: http://python-patterns.guide/