Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/06/2010, 20:15
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Instanciar objetos y guardarlos en un vector

Bienvenido al foro mirkodrpic:

En esta caso te recomiendo varias cosas:

1.- No definir métodos get y set si tus miembros de clase son públicos.
2.- Para este problema te recomendaría usar un diccionario en lugar de un vector.

Ahora bien cabe aclarar las diferencias entre vector y list:
Un vector es un arreglo que puede crecer esto significa memoria contigua.
En cambio una lista es una estructura de datos y por lo tanto no garantiza memoria contigua.
Ambos tienen sus ventajas y desventajas, pero para una cantidad inmensa de datos es mejor una lista.

Como puedes ver en la documentación de python existen muchos métodos para manejar listas.

Haciendo que el trabajo de agregar, borrar y buscar se reduscan simplemente a funciones tales como append, remove e index.

Ahora bien cuando tenemos una lista de datos "primitivos" (recordemos que en python todo son objetos) no tenemos problemas al trabajar con estos objetos por que tienen los metodos muy bien definidos. En cambio cuando hacemos nuestra clase tenemos que definir esos metodos.

Aquí un ejemplo, perdón por el derroche de creatividad para los datos.
Código Python:
Ver original
  1. #Esta es la clase libro
  2. class Book:
  3.     def __init__(self, idbook, title, author, edition,  editorial):
  4.         self.idbook = idbook
  5.         self.title = title
  6.         self.author = author
  7.         self.edition = edition
  8.         self.editorial = editorial
  9.  
  10.     def __str__(self):
  11.         return self.idbook
  12.  
  13.     def __eq__(self, y):
  14.         if self.idbook == y:
  15.             return True
  16.         return False
  17.  
  18. #Vamos a definir unas cuantas funciones
  19.  
  20. #Como añadir libros
  21. def add_book(book_list, book):
  22.     book_list.append(book)
  23.     print "Añadido %s exitosamente" % book.idbook
  24.  
  25. #Busca libro SOLO por id
  26. def search_book(book_list, book_id):
  27.     try:
  28.         index = book_list.index(book_id)
  29.         print "%s esta en el registro %d" % (book_id, index)
  30.     except ValueError:
  31.         print "%s NO esta en el registro" % book_id
  32.  
  33. #Borra libro por id
  34. def delete_book(book_list, book_id):
  35.     try:
  36.         book_list.remove(book_id)
  37.         print "%s se ha borrado exitosamente" % book_id
  38.     except ValueError:
  39.         print "%s NO esta en el registro" % book_id
  40.  
  41. l = []
  42. add_book(l, Book("001", "Titulo1", "Autor1", "Edicion1", "Editorial1") )
  43. add_book(l, Book("002", "Titulo2", "Autor2", "Edicion2", "Editorial2") )
  44. add_book(l, Book("003", "Titulo3", "Autor3", "Edicion3", "Editorial3") )
  45. add_book(l, Book("004", "Titulo4", "Autor4", "Edicion4", "Editorial4") )
  46. add_book(l, Book("005", "Titulo5", "Autor5", "Edicion5", "Editorial5") )
  47.  
  48. search_book(l, "005")
  49. search_book(l, "000")
  50.  
  51. delete_book(l, "004")
  52. delete_book(l, "004")

Si modificamos el método __eq__ podemos hacer búsquedas y remover libros de la lista ya sea por edición, titulo, autor, etc...