gpt4 book ai didi

python - 不是有效 python 标识符的属性

转载 作者:太空狗 更新时间:2023-10-29 21:09:50 26 4
gpt4 key购买 nike

通常的属性访问方法要求属性名称为valid python identifiers .

但是属性不必是有效的 python 标识符:

>>> class Thing:
... def __init__(self):
... setattr(self, '0potato', 123)
...
>>> t = Thing()
>>> Thing.__getattribute__(t, '0potato')
123
>>> getattr(t, '0potato')
123

当然,t.0potato 仍然是一个SyntaxError,但该属性仍然存在:

>>> vars(t)
{'0potato': 123}

允许这样做的原因是什么?对于带有空格、空字符串、python 保留关键字等的属性,真的有任何有效的用例吗?我认为原因是属性只是对象/命名空间字典中的键,但这没有任何意义,因为其他对象是有效的字典键是不允许的:

>>> setattr(t, ('tuple',), 321)
TypeError: attribute name must be string, not 'tuple'

最佳答案

详细信息来自 comment在帖子上完全回答了这个问题,所以我将其作为答案发布:

Guido说:

...it is a feature that you can use any arbitrary string with getattr() and setattr(). However these functions should (and do!) reject non-strings.

可能的用例包括从常规点访问中隐藏属性,以及使属性与外部数据源相对应(这可能与 Python 关键字冲突)。所以,争论似乎是没有充分的理由禁止它。

至于不允许非字符串的原因,这似乎是一个明智的限制,它确保了更高的实现性能:

Although Python's dicts already have some string-only optimizations -- they just dynamically adapt to a more generic and slightly slower approach once the first non-key string shows up.

关于python - 不是有效 python 标识符的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26534634/

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