我有一个字符串:
(“位” + str(loopCount)))`
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,(“ Bit” + str(loopCount)))
这给我这个错误:
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()
function:setattr(self, 'Bit{}'.format(loopCount), QtGui.QLineEdit(self))
关于python - Python 3 getattr字符串命名为什么不好?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25703280/