Python 3 getattr字符串命名为什么不好?
我有一个字符串:` (“位”+str(循环计数)))` loopcount只是我在循环中递增的一个数字 我想用它创建一些qtwidget,比如: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
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))