如何将9次LevelButton类实例化代码精简为1-2行?
代码冗余简化方案
问题背景
现有重复代码实例化LevelButton类,生成self.level1至self.level9,仅x坐标依次变化,其余参数固定:
self.level1 = LevelButton(10, 10, "1", "black", "lightgreen") self.level2 = LevelButton(50, 10, "1", "black", "lightgreen") self.level3 = LevelButton(100, 10, "1", "black", "lightgreen") self.level4 = LevelButton(150, 10, "1", "black", "lightgreen") self.level5 = LevelButton(200, 10, "1", "black", "lightgreen") self.level6 = LevelButton(250, 10, "1", "black", "lightgreen") self.level7 = LevelButton(300, 10, "1", "black", "lightgreen") self.level8 = LevelButton(350, 10, "1", "black", "lightgreen") self.level9 = LevelButton(400, 10, "1", "black", "lightgreen")
LevelButton类定义:
class LevelButton: x_0 = 0 y_0 = 0 text = "" fg_color = (0, 0, 0) bg_color = (0, 0, 0) def __init__(self, x_0, y_0, text, fg_color, bg_color): self.x_0 = x_0 self.y_0 = y_0 self.text = text self.fg_color = fg_color self.bg_color = bg_color
简化实现
完全可以简化为1-2行,以下是几种可行方案:
方案1:单行循环+动态属性赋值
直接通过setattr动态给实例添加属性,一行代码搞定:
for idx, x in enumerate([10,50,100,150,200,250,300,350,400], 1): setattr(self, f"level{idx}", LevelButton(x, 10, "1", "black", "lightgreen"))
方案2:拆分两行(可读性更好)
如果觉得单行代码过长,可拆分为定义坐标列表和循环两行:
x_coords = [10,50,100,150,200,250,300,350,400] for idx, x in enumerate(x_coords, 1): setattr(self, f"level{idx}", LevelButton(x, 10, "1", "black", "lightgreen"))
补充:若x坐标为严格等差(假设笔误)
如果你的x坐标本意是从10开始每次递增50(而非10→50→100的特殊起始),可以用更简洁的等差生成:
for i in range(9): setattr(self, f"level{i+1}", LevelButton(10 + i*50, 10, "1", "black", "lightgreen"))
内容的提问来源于stack exchange,提问作者F.Foltyński
相关产品推荐
相关产品推荐

