Foros del Web » Programando para Internet » Python »

Acceder a propiedad mediante ¿colecciones?

Estas en el tema de Acceder a propiedad mediante ¿colecciones? en el foro de Python en Foros del Web. Estoy tratando de hacer una clase y necesito acceder a una propiedad, pero no conozco el nombre de esa propiedad, ¿cómo puedo acceder a ella? ...
  #1 (permalink)  
Antiguo 02/11/2011, 15:19
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Acceder a propiedad mediante ¿colecciones?

Estoy tratando de hacer una clase y necesito acceder a una propiedad, pero no conozco el nombre de esa propiedad, ¿cómo puedo acceder a ella?
Para que me entedáis:
Código Python:
Ver original
  1. class Clase:
  2.  def __init__(self):
  3.   self.bar1 = 'baz'
  4.   self.bar2 = 'foo'
  5.   self.bar3 = 'candy'
  6.   for i in range(1, 4):
  7.    print self['bar' + str(i)]
Así es como yo lo haría en JS, pero evidentemente esto no funciona en Python. Seguramente será una duda muy simple, pero tampoco sabía que buscar exactamente en Google, aunque sí me ha servido para aprender para que sirve property (setters/getters)
Saludos y gracias (:
Edit: Como he escrito este ejemplo directamente aquí no he podido usar el tabulador, y las líneas vacías me las ha eliminado D:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #2 (permalink)  
Antiguo 02/11/2011, 17:19
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: Acceder a propiedad mediante ¿colecciones?

Hay 2 maneras de hacer esto:

Si tienes cosas así te recomiendo ponerlo en una lista.
Código Python:
Ver original
  1. class Clase:
  2.     def __init__(self):
  3.         self.bar = ['baz', 'foo', 'candy']
  4.         for i in range(1, 4):
  5.             print self.bar[i]

Usar la función getattr
Código Python:
Ver original
  1. class Clase:
  2.     def __init__(self):
  3.         self.bar1 = 'baz'
  4.         self.bar2 = 'foo'
  5.         self.bar3 = 'candy'
  6.         for i in range(1, 4):
  7.             print getattr(self, 'bar' + str(i))
  #3 (permalink)  
Antiguo 03/11/2011, 00:37
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Acceder a propiedad mediante ¿colecciones?

Hey, gracias por esa función! Ya había pensado en un array/diccionario pero no me acaba de cuadrar en esta ocasión. Otra duda, si tengo algo como esto:
Código Python:
Ver original
  1. class Foo:
  2.     def bar(self):
  3.         return 'baz'
  4.    
  5.     foo = bar(self)
Evidentemente self no existe en el scope "global", pero si no se lo paso me devuelve un error. Podría hacerlo usando foo como función, pero me ha entrado la curiosidad de si se puede hacer así.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #4 (permalink)  
Antiguo 03/11/2011, 00:47
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: Acceder a propiedad mediante ¿colecciones?

Eso lo haría en el constructor.

Código Python:
Ver original
  1. class Foo:
  2.     def __init__(self):
  3.         self.foo = self.bar()
  4.     def bar(self):
  5.         return 'baz'
  #5 (permalink)  
Antiguo 03/11/2011, 09:08
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Acceder a propiedad mediante ¿colecciones?

Ok, solucionado, y volviendo al problema del principio Tengo esto:
Código Python:
Ver original
  1. getattr(self, 'v' + str(i))[n] = int(num)
i y n son variables de dos bucles, y num lo recibo de un raw_input y lo paso a número con int. Sin embargo, al ejecutar esto me dice:
Cita:
Iniciado por Python
IndexError: index out of range
ponga el valor que ponga. Creo que el error no está en el getattr, pero no sé qué es lo que lo puede estar causando.
Saludos :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #6 (permalink)  
Antiguo 03/11/2011, 09:13
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: Acceder a propiedad mediante ¿colecciones?

Eso quiere decir que te saliste de los limites de la lista.

No es por nada, pero creo que deberías manejar una lista de listas.

Código Python:
Ver original
  1. v[i][n] = int(num)
Mas o menos así. Es mucho mas legible y elegante.

Si lo quieres es añadir elementos entonces tienes que usar el método append.
  #7 (permalink)  
Antiguo 03/11/2011, 13:49
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Acceder a propiedad mediante ¿colecciones?

Cita:
Iniciado por razpeitia
Si lo quieres es añadir elementos entonces tienes que usar el método append.
Super mega facepalm Acostumbrado a rellenar los arrays por índices en vez de push/append no me di cuenta de que en Python no se podía hacer así D:
Gracias de nuevo :)
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Etiquetas: google, mediante, propiedad, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:51.