[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