【问题标题】:Python code refactoring question. Applying functions to multiple elementsPython代码重构问题。将函数应用于多个元素
【发布时间】:2010-06-30 15:37:26
【问题描述】:

我的代码看起来像这样:

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”,因为那真的不是好多了。我怎样才能重写我的第一个代码以使其与我所说的一样?

【问题讨论】:

    标签: python refactoring list


    【解决方案1】:

    使用内置的getattr 函数获取对象以通过其属性名称调用函数:

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

    【讨论】:

      【解决方案2】:

      你可以试试这样的:

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

      【讨论】:

      • 当仅将项目 foo,bar 添加到列表项目时,您正在引用不存在的变量。 self.ui.foo != foo
      • 哦,好的。呃……我现在明白了。谢谢!
      猜你喜欢
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 2022-01-21
      相关资源
      最近更新 更多