我正在尝试创建一些通过类动态定义的简单对象 - 以允许我快速迭代创建这些对象的所有可能性。class NSObjects: def __init__(self, shape, position, shading): self.shape = shape self.position = position self.shading = shading def __str__(self): return '{} - {} - {}'.format(self.shape(), self.position(), self.shading())def NSGenerator_1(): for i in range (0,3): obj_1_i = NSObjects(shape_init_top + i, posn_init_top+i, shading_init_top+i) for i in range (3,6): obj_1_i = NSObjects(shape_init_mid + i, posn_init_mid+i, shading_init_mid+i) for i in range (6,9): obj_1_i = NSObjects(shape_init_mid + i, posn_init_mid+i, shading_init_mid+i)NSGenerator_1()print(obj_1_2)目前它告诉我 obj_1_2 不存在。为此,您可以假设我已将所有 init 变量定义为从代码中其他位置的 0、1 或 2 开始。我基本上是在尝试创建一系列具有数学公式定义的属性的对象。提前感谢您提供的任何帮助(我几周前才开始编码,所以这可能是一个非常愚蠢的问题!)
1 回答

偶然的你
TA贡献1841条经验 获得超3个赞
您只分配给obj_1_i
,而不是obj_1_2
,并且它是函数的局部变量。Python 无法判断_i
是作为一个单独的变量而不是较长变量名称的一部分。要快速修复,请尝试用 替换 obj_1_i =
零件globals()[f'obj_1_{i}'] =
。
但是将数字索引滚动到这样的变量名称中 ( _1_2
) 是一种代码味道。更好的设计是将它们实际用作数据结构的索引,例如列表或字典。
例如,obj = {}
在顶层定义 (在任何类或函数之外)。
然后你可以obj_1_2
用obj[1, 2]
, 等替换任何地方。如果你这样写它们,obj[1, i]
就会像你期望的那样在 for 循环中工作。
添加回答
举报
0/150
提交
取消