Python 3 getattr字符串,为什么它不好?

时间:2014-09-06 18:09:11

标签: python qt

我有一个字符串:`

(“Bit”+ str(loopCount)))`

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

我想要做的就是创建一些qtwidget:

self.Bit1 = QtGui.QLineEdit(self)
self.Bit2 = QtGui.QLineEdit(self)
self.Bit3 = QtGui.QLineEdit(self)

......等等,我和LoopCount一样多。

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

给我这个错误: AttributeError:'Class2'对象没有属性'Bit1' 这是非常令人沮丧的,因为我可以在错误中看到我用“Bit1”获得我想要的东西,但我不知道为什么它想成为我班级的归属。 没有办法简单地

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

error : SyntaxError: can't assign to function call

我已经阅读过很多次“不要使用getattr us a dictionary”好吧......但为什么呢?使用字典听起来像是为了做这么简单的事情而做了很多工作?

由于

1 个答案:

答案 0 :(得分:2)

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

self.bits = [QtGui.QLineEdit(self) for _ in range(3)]

创建一个包含3个QLineEdit个对象的列表。

动态设置属性,您可以使用setattr() function

setattr(self, 'Bit{}'.format(loopCount), QtGui.QLineEdit(self))