gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:02:48 25 4
gpt4 key购买 nike

我有一个字符串:`

("位"+ 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, ("位"+ str(loopCount) ))

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

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 3 getattr 字符串命名为什么不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25703280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com