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

标签 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”,因为这确实不是好多了。我怎样才能重写我的第一个代码以使其像我正在谈论的那样?

最佳答案

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

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

关于Python代码重构问题。将函数应用于多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3150856/

相关文章:

Python - Selenium 通过 href 定位元素

python - 如何仅在 django 中将外键选择限制为相关对象

java - 如果第一个字母是大写则删除单词

python - 使用python翻转数组中的位

python - TensorFlow embedding_attention_seq2seq 方法是否默认实现双向 RNN 编码器?

python - 在 ElementTree 中使用 XPath 按文本查找元素

c# - 重构ifs

javascript - 将 jQuery fadeIn 重写为 Javascript

Java:如何重构这种try-catch block ?

python - list.index() 是否实现缓存