You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 02:50:39