Vol*_*ity 13 python attributes
假设我定义了这个类:
class A:
pass
a = A()
Run Code Online (Sandbox Code Playgroud)
现在很明显我可以像这样设置属性:
a.x = 5
Run Code Online (Sandbox Code Playgroud)
但是setattr,我可以给出a名称中包含空格的属性.
setattr(a, 'white space', 1)
setattr(a, 'new\nline', None)
Run Code Online (Sandbox Code Playgroud)
dir(a)包含'white space'和'new\nline'.
我无法使用.运算符访问这些属性,因为它引发了SyntaxError:
>>> a.white space
File "<interactive input>", line 1
a.white space
^
SyntaxError: invalid syntax
>>> a.new\nline
File "<interactive input>", line 1
a.new\nline
^
SyntaxError: unexpected character after line continuation character
Run Code Online (Sandbox Code Playgroud)
但我可以getattr:
>>> getattr(a, 'white space')
1
>>> getattr(a, 'new\nline')
None
Run Code Online (Sandbox Code Playgroud)
这个功能背后有原因吗?如果是这样,它是什么?
我们应该使用它还是符合PEP8中定义的标准?
Lor*_*ams 11
对象属性仅仅是对象中定义的那些属性__dict__.如果从这个角度考虑它,那么允许str在属性名称中使用空格(或者可以包含在a 中的任何其他字符)是完全有意义的.
>>> class X(object):
... pass
...
>>> x = X()
>>> setattr(x, 'some attribute', 'foo')
>>> x.__dict__
{'some attribute': 'foo'}
>>> x.__dict__['some attribute']
'foo'
Run Code Online (Sandbox Code Playgroud)
也就是说,Python的语言语法不能允许直接属性引用中的空格,因为解释器不知道如何对程序源进行属性标记化(解析).我坚持使用可以通过直接属性引用访问的属性名称,除非您绝对需要这样做.
| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |