0

我在 Python 脚本中有以下内容:

setattr(stringRESULTS, "b", b)

这给了我以下错误:

AttributeError: 'str' object has no attribute 'b'

谁能告诉我这里有什么问题?

4

2 回答 2

3

不要这样做。引用不可估量的Greg Hewgill的话,

“如果你发现自己使用带引号的名称来引用变量,通常有更好的方法来做你想做的任何事情。”

[在这里你是一个级别,并使用字符串变量作为名称,但这是相同的潜在问题。] 或者 S. Lott 在同一个线程中跟进:

“90% 的时间,你应该使用字典。另外 10% 的时间,你需要完全停止正在做的事情。”

如果您使用 stringRESULTS 的内容作为指向某个您想要的对象的指针fredsetattr那么您想要定位的这些对象必须已经存在于某个地方,并且字典是存储它们的自然数据结构。实际上,根据您的用例,您可能首先可以使用字典键/值对而不是属性。

IOW,我的版本(我猜)你想要做的可能看起来像

d[stringRESULTS].b = b

或者

d[stringRESULTS]["b"] = b

取决于我是否想要/需要使用对象实例或字典就足够了。

(PS 相对较少的人订阅了 python-3.x 标签。添加裸 'python' 标签通常会引起更多关注。)

于 2012-02-11T17:12:46.367 回答
0

由于str是一种低级原始类型,因此您不能真正在其上设置任何任意属性。您可能需要dictstr的子类:

class StringResult(str):
    pass

它的行为应该符合您的预期:

my_string_result = StringResult("spam_and_eggs")
my_string_result.b = b

编辑:

如果您尝试按照DSM的建议进行操作,即。修改与变量值同名的变量的属性,stringRESULTS那么这应该可以解决问题:

locals()[stringRESULTS].b = b

请注意,这是一个非常危险的操作,如果您不小心,可能会对您的应用程序造成各种破坏。

于 2012-02-11T15:32:46.417 回答