[Python-es] multiasignación de variables
Chema Cortes
pych3m4 en gmail.com
Vie Abr 30 15:12:17 CEST 2010
El día 30 de abril de 2010 11:01, Hernan M Foffani
<hfoffani en gmail.com> escribió:
> 2010/4/30 monoBOT <monobot.soft en gmail.com>
>> EN DEFINITIVA … alguien me puede aconsejar algún metodo de asignación masiva de variables?? … gracias
>
> Podrías usar instropección (getattr() y setattr()).
> Con un diccionario mapeas los nombres rhs->lhs y con un simple bucle
> recorres los nombres de las variables y las vas asignando. Si los
> nombres son "atributo" + "_fichero" puedes obviar el diccionario.
En claro, podía ser así:
for atributo in ( 'nombre', 'primerapellido', 'segundoapellido',
'dni', 'direccion', 'codigopostal', 'poblacion', 'provincia')
setattr(self, atributo +"_fichero", xml_none(busqueda_xml
('usuario', atributo ))
De todas formas, si un código con tanta asignación parece complicado,
posiblemente es porque lo estemos haciendo mal. Hay que crear código
para que sea "mantenible", y un código así no facilita en nada su
mantenimiento.
Tantas asignaciones de variables acabadas en "_fichero" indica que se
necesita un diccionario,... y recomendable diccionarios anidados:
atributos_def={
"usuario": ( 'nombre', 'primerapellido', 'segundoapellido',
'dni', 'direccion', 'codigopostal',
'poblacion', 'provincia'),
}
self.ficheros=dict(
(key, dict((attr, xml_none(busqueda_xml (key, attr)))) for attr in values)
for key.values in atributos_def.iteritems()
)
Por ejemplo, en lugar de self.nombre_fichero se pasa a usar
self.ficheros["usuario"]["nombre]. De este modo, es mucho más sencillo
añadir nuevos campos o atributos.
Más información sobre la lista de distribución Python-es