假设我定义了这个类:
class A:
pass
a = A()
现在显然我可以这样设置属性:
a.x = 5
但是使用setattr
,我可以为a
赋予包含空格的属性名。
setattr(a, 'white space', 1)
setattr(a, 'new\nline', None)
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
但是我可以使用getattr
函数:
>>> getattr(a, 'white space')
1
>>> getattr(a, 'new\nline')
None
这个功能背后是否有原因?如果有,是什么?
我们应该使用它,还是遵循PEP8中定义的标准?