gpt4 book ai didi

python - 为什么 Python 对象可以有一个用整数表示的属性?

转载 作者:行者123 更新时间:2023-11-28 16:36:33 24 4
gpt4 key购买 nike

我想我可能对 python 属性实际上是什么存在根本性的误解。请考虑以下事项:

 >>> class Test:
... pass
...
>>> t = Test()
>>> setattr(t, '0', 0)
>>> t.0
File "<stdin>", line 1
t.0
^
SyntaxError: invalid syntax
>>> getattr(t, '0')
0
>>> setattr(t, 'one', 1)
>>> t.one
1
>>> getattr(t, 'one')
1

为什么 Python 允许我设置一个属性,如果我不能用点符号合法地访问它?我知道 t.0 没有意义,但同时我想知道为什么它与 t.one 没有什么不同,因为我以相同的方式创建它们。

最佳答案

属性是任何 Python 对象都可以拥有的一种成员。通常您会期望内置语法来指示接受哪种属性名称。为此,定义为 pretty clear :

attributeref ::=  primary "." identifier

所以点之后的内容必须是有效的 identifier这很容易限制允许的属性名称。现在忽略其他 Unicode 区域,它本质上意味着该属性不能以数字开头。因此 0 不是有效标识符,因此 t.0 不是规范中的有效属性引用

但是,getattr 和类似的方法有点不同。他们只要求属性名称是一个字符串。该字符串直接传递给内部 PyObject_GetAttr功能。而且这些不需要有效的标识符。

因此使用 getattr 等,您基本上可以欺骗 Python 并将属性附加到对象,根据语言规范,这些名称是不允许的。

关于python - 为什么 Python 对象可以有一个用整数表示的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25477606/

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