Python 3 getattr字符串命名为什么不好?

Python 3 getattr字符串命名为什么不好?,python,qt,Python,Qt,我有一个字符串:` (“位”+str(循环计数)))` loopcount只是我在循环中递增的一个数字 我想用它创建一些qtwidget,比如: self.Bit1 = QtGui.QLineEdit(self) self.Bit2 = QtGui.QLineEdit(self) self.Bit3 = QtGui.QLineEdit(self) …等等,我在LoopCount的数量 为此,我需要将字符串转换为名称。通过查看网络,我发现这个getattr似乎是最简单的方法: 对于范围(0,se

我有一个字符串:`

(“位”+str(循环计数)))`

loopcount只是我在循环中递增的一个数字

我想用它创建一些qtwidget,比如:

self.Bit1 = QtGui.QLineEdit(self)
self.Bit2 = QtGui.QLineEdit(self)
self.Bit3 = QtGui.QLineEdit(self)
…等等,我在LoopCount的数量

为此,我需要将字符串转换为名称。通过查看网络,我发现这个getattr似乎是最简单的方法: 对于范围(0,self.mySpnValue)内的BitNmb: getattr(self,(“位”+str(循环计数)))

这给了我一个错误: AttributeError:“Class2”对象没有属性“Bit1” 这是相当令人沮丧的,因为我可以在错误中看到,我用“Bit1”获得了我想要的东西,但我不知道为什么它想成为我的类的属性。 也没有简单的方法

getattr(self, ("Bit" + str(loopCount) )) = QtGui.QLineEdit(self)

error : SyntaxError: can't assign to function call
我已经读了很多次“不要使用getattr我们字典”好的。。。但是为什么呢?仅仅为了做这么一件简单的事情,使用字典听起来像是一项艰巨的工作


谢谢,不要创建单独的、编号的属性,而是使用列表或字典。在这种情况下,列表就可以了:

self.bits = [QtGui.QLineEdit(self) for _ in range(3)]
创建3个
QLineEdit
对象的列表

要动态设置属性,请使用:


setattr
执行您试图执行的操作。但实际上,只要使用一个列表:
self.bits=[QtGui.QLineEdit(self)for uu in range(loop\u count)]
我就明白了为什么会出现这个错误,这是因为“self”。。。arg。感谢列表示例,但我真的不理解它,我在编码方面不是特别新,但是self.bits=[QtGui.QLineEdit(self)for uu in range(loop_count)]对我来说没什么意义。如果我在做这样的事情,我会发现我自己有几个完全相同的self.bit,这似乎是不可能的。我明白了,汉迪。非常感谢:)但是当我想使用列表时,出现了一些问题:对于范围(0,self.mySpnValue)中的BitNmb:self.vbox2.addWidget(self.bits[loopCount]-1)TypeError:不支持的操作数类型-:'QLineEdit'和'int',所以我仔细看了一下,下面是包含我的列表的内容:这是我的Gui是的,但不是selfBits1。。。self.vbox2.addWidget(setattr(self,'Bit{}.format(loopCount),QtGui.QLineEdit(self))返回另一个错误:QLayout:无法将空小部件添加到QVBoxLayout/I这个列表方法有点迷茫,为什么使用getattr这么糟糕?您试图从
QLineEdit
对象中减去1:
self.bits[loopCount]-1
。也许你想把
-1
放在索引表达式中?亲爱的。。。真丢脸,非常感谢你的帮助一切都很好,都很整洁:)谢谢!
setattr(self, 'Bit{}'.format(loopCount), QtGui.QLineEdit(self))