Python代码重构问题。将函数应用于多个元素

时间:2010-06-30 15:37:27

标签: python refactoring list

我的代码看起来像这样:

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)

我想把它变成这样的东西:

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

但显然只是在列表中包含'self.ui'部分的变量是无效的,我宁愿不为列表中的每个元素键入'self.ui',因为那真的不是好多了。我怎么能重写我的第一个代码,使它成为我正在谈论的东西?

2 个答案:

答案 0 :(得分:4)

使用内置的getattr函数抓取对象,使其属性名称调用该函数:

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

答案 1 :(得分:-3)

您可以尝试以下方式:

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