为了账号安全,请及时绑定邮箱和手机立即绑定

Python初学者:使用循环创建具有动态属性的动态类对象

Python初学者:使用循环创建具有动态属性的动态类对象

饮歌长啸 2021-09-28 16:15:03
我正在尝试创建一些通过类动态定义的简单对象 - 以允许我快速迭代创建这些对象的所有可能性。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_2obj[1, 2], 等替换任何地方。如果你这样写它们,
obj[1, i]就会像你期望的那样在 for 循环中工作。


查看完整回答
反对 回复 2021-09-28
  • 1 回答
  • 0 关注
  • 243 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号