通常的属性访问方法要求属性名称是有效的python标识符.
但属性不必是有效的python标识符:
>>> class Thing:
... def __init__(self):
... setattr(self, '0potato', 123)
...
>>> t = Thing()
>>> Thing.__getattribute__(t, '0potato')
123
>>> getattr(t, '0potato')
123
Run Code Online (Sandbox Code Playgroud)
当然,t.0potato仍然是一个SyntaxError,但属性仍然存在:
>>> vars(t)
{'0potato': 123}
Run Code Online (Sandbox Code Playgroud)
这是允许的原因是什么?对于带有空格,空字符串,python保留关键字等的属性,是否真的有任何有效的用例?我认为原因是属性只是对象/命名空间dict中的键,但这没有意义,因为不允许使用其他有效dict键的对象:
>>> setattr(t, ('tuple',), 321)
TypeError: attribute name must be string, not 'tuple'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
574 次 |
| 最近记录: |