viernes, junio 22, 2007

Composite Pattern en Python

En un post anterior muestro como implementar el patron Composite en PHP. Hoy implemente el mismo código pero en Python, solamente como un jercicio propio y para empezar a hacer algo en Python ya que no hago mucho, solo leo :-(

Ya que estoy remarco algunas cosas para el que no conozca Python. En python para marcar los bloques de código se hace por medio de la identación lo cual hace -obligadamente- el código más fácil de leer. Los puntos y las ">>>" que ven en el código es porque estaba trabajando con la consola interactiva de Python algo muy practico para probar cosas rapidamente.

Bueno, sin más preambulos les dejo el código (disculpen, no encontre como colorear el código :-( ):

  1. >>> class Grafico:
  2. ... def dibujar(self):
  3. ... pass
  4. ...
  5. >>> class Triangulo(Grafico):
  6. ... def __init__(self,nombre = 'unknown'):
  7. ... self.nombre = nombre
  8. ... def dibujar(self):
  9. ... print '-Soy triangulo ', self.nombre
  10. ...
  11. >>> class Contenedor(Grafico):
  12. ... def __init__(self, nombre = 'unknown'):
  13. ... self.nombre = nombre
  14. ... self.contenedor = []
  15. ... def dibujar(self):
  16. ... print 'Soy contenedor ', self.nombre
  17. ... for grafico in self.contenedor:
  18. ... grafico.dibujar()
  19. ... def agregar(self, grafico):
  20. ... self.contenedor.append(grafico)
  21. ... def sacar(self, grafico):
  22. ... if grafico in self.contenedor:
  23. ... self.contenedor.remove(grafico)
  24. ...
  25. >>> tri1 = Triangulo('1')
  26. >>> tri2 = Triangulo('2')
  27. >>> tri3 = Triangulo('3')
  28. >>> cont1 = Contenedor('1')
  29. >>> cont2 = Contenedor('2')
  30. >>> cont3 = Contenedor('3')
  31. >>> cont1.agregar(tri1)
  32. >>> cont1.agregar(tri2)
  33. >>> cont2.agregar(tri3)
  34. >>> cont3.agregar(cont1)
  35. >>> cont3.agregar(cont2)
  36. >>>
  37. >>> cont3.dibujar()
  38. Soy contenedor 3
  39. Soy contenedor 1
  40. -Soy triangulo 1
  41. -Soy triangulo 2
  42. Soy contenedor 2
  43. -Soy triangulo 3
Dario Ocles.