Skip to main content
 首页 » 编程设计

python之优化 python 代码以处理对象名称

2025年05月04日9rubylouvre

我有一个包含 16 个正方形的 pygtk 表,每个正方形都包含一个标签。标签名称为:label1、label2、label3、...、label16。

我还有一个每 n 秒触发一次的计时器。当计时器启动时,其中一个方 block 会突出显示(只需将其字体大小设置为 18,将其余方 block 的字体大小设置为 12)。

如果只有 3 个标签,代码将是这样的:

def update_grid(self): 
    if self.timer_id is not None: 
        self.__actual_choice = (self.__actual_choice % 16)+1 
        if self.__actual_choice == 1: 
            self.label1.modify_font(self.__font_big) 
            self.label2.modify_font(self.__font_small) 
            self.label3.modify_font(self.__font_small) 
        elif self.__actual_choice == 2: 
            self.label1.modify_font(self.__font_small) 
            self.label2.modify_font(self.__font_big) 
            self.label3.modify_font(self.__font_small) 
        elif self.__actual_choice == 3: 
            self.label1.modify_font(self.__font_small) 
            self.label2.modify_font(self.__font_small) 
            self.label3.modify_font(self.__font_big) 

但是如果有 16 个标签,代码会很庞大。我想知道在 python 中是否有一种方法可以做类似的事情:

            self.(label+"i").modify_font(self.__font_small) 

请您参考如下方法:

您可以使用内置函数getattr()正如其他人所建议的那样:

label = getattr(self, 'label%d' % i) 
label.modify_font(self.__font_small) 

但实际上,最好将 16 个 label 存储在 list 中.结尾有很多数字的变量很糟糕 code smell .

for index, label in enumerate(self.labels): 
    if index == self.__actual_choice: 
        label.modify_font(self.__font_big) 
    else: 
        label.modify_font(self.__font_small)