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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:05:17