fork download
  1. # Contenedores
  2.  
  3. class Camion:
  4. def __init__(self, c):
  5. if isinstance(c, ContenedorGranCapacidad):
  6. self.__class__ = Trailer
  7.  
  8. @staticmethod
  9. def creaCamionPara(c):
  10. if isinstance(c, ContenedorGranCapacidad):
  11. return Trailer(c)
  12. else:
  13. return Camion(c)
  14.  
  15. def __str__(self):
  16. return "camion"
  17.  
  18.  
  19. class Trailer:
  20. def __init__(self, c):
  21. if isinstance(c, ContenedorNormal):
  22. self.__class__ = Camion
  23.  
  24. def __str__(self):
  25. return "trailer"
  26.  
  27.  
  28. class Barco:
  29. def __init__(self, contenedores):
  30. self._contenedores = contenedores
  31.  
  32. def estaDescargado(self):
  33. return len(self._contenedores) == 0
  34.  
  35. def descargaContenedor(self):
  36. return self._contenedores.pop()
  37.  
  38. def __str__(self):
  39. return str.join(",".join([str(x) for x in self._contenedores]))
  40.  
  41.  
  42. class Contenedor:
  43. pass
  44.  
  45.  
  46. class ContenedorNormal(Contenedor):
  47. def __str__(self):
  48. return "contNormal"
  49.  
  50.  
  51. class ContenedorGranCapacidad(Contenedor):
  52. def __str__(self):
  53. return "contGrande"
  54.  
  55.  
  56. if __name__ == "__main__":
  57. b = Barco([ContenedorNormal(), ContenedorGranCapacidad(), ContenedorNormal()])
  58. while not (b.estaDescargado()):
  59. # Uso de herencia dinamica
  60. print(Camion(b.descargaContenedor()))
  61. # Uso de método estático
  62. # print(Camion.creaCamionPara(b.descargaContenedor()))
  63.  
Success #stdin #stdout 0.01s 27656KB
stdin
Standard input is empty
stdout
camion
trailer
camion