我有一个字符串:

(“位” + 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/

10-10 21:52