Pregunta de refactorización del código Python. Aplicando funciones a múltiples elementos.

Tengo un código que se parece a esto:

self.ui.foo.setEnabled(False) self.ui.bar.setEnabled(False) self.ui.item.setEnabled(False) self.ui.item2.setEnabled(False) self.ui.item3.setEnabled(False) 

Y me gustaría convertirlo en algo como esto:

 items = [foo,bar,item,item2,item3] for elm in items: self.ui.elm.setEnabled(False) 

Pero, obviamente, el hecho de tener las variables en la lista sin la parte ‘self.ui’ no es válido, y prefiero no escribir ‘self.ui’ para cada elemento de la lista, porque eso no es mucho mejor. ¿Cómo podría reescribir mi primer código para convertirlo en algo parecido a lo que estoy hablando?

Agarre el objeto para que se llame a la función por su nombre de atributo usando la función incorporada getattr :

 items = ['foo', 'bar', 'item', 'item2', 'item3'] for elm in items: getattr(self.ui, elm).setEnabled(False) 

Podrías probar algo como:

 items = [foo,bar,item,item2,item3] ui = self.ui for elm in items: ui.elm.setEnabled(False)