如何使用str(x)、str(y)调用动态命名的Square类实例对象?
用容器存储Square实例替代动态变量名
你想通过x和y拼接的名称调用Square对象,直接生成类似squarexy的变量名不是Python的规范做法,推荐用字典或二维列表来存储所有Square实例,既方便调用也便于维护。
方法一:字典存储(按名称索引)
用字符串"square{x}{y}"作为字典的键,对应的值是Square实例:
class Square: def __init__(self, name, pos) -> None: self.name = name self.pos = pos # pos is (x,y) self.unit = None # 初始化存储字典 squares = {} n = 5 # 替换成你的网格尺寸 warrior = "Warrior Instance" # 示例warrior对象 for x in range(n): for y in range(n): square_key = f"square{x}{y}" # 创建并存储Square实例 squares[square_key] = Square(square_key, (x, y)) # 直接通过字典键访问并修改unit属性 squares[square_key].unit = warrior # 调用示例:访问x=2,y=3的方格 print(squares["square23"].unit)
方法二:二维列表存储(按坐标索引)
由于你的场景是网格,用二维列表更直观,直接通过x和y的索引定位:
class Square: def __init__(self, name, pos) -> None: self.name = name self.pos = pos # pos is (x,y) self.unit = None n = 5 # 替换成你的网格尺寸 warrior = "Warrior Instance" # 示例warrior对象 # 初始化n×n的二维列表 squares = [[None for _ in range(n)] for _ in range(n)] for x in range(n): for y in range(n): square_name = f"square{x}{y}" squares[x][y] = Square(square_name, (x, y)) squares[x][y].unit = warrior # 调用示例:访问x=1,y=2的方格 print(squares[1][2].unit)
为什么不推荐动态生成变量名
虽然可以通过globals()[square_key] = Square(...)的方式动态创建变量,但这种做法会让代码结构混乱,变量难以追踪,后期调试和维护成本很高,远不如使用容器的方式规范可靠。
内容的提问来源于stack exchange,提问作者PE seyeux
相关产品推荐
相关产品推荐

