假设我们在 Python 2.7 或 3.5 中有一个虚拟类。我们想要为实例分配一些属性:
>>> class X(object):
... pass
...
>>> x = X()
让我们使用 setattr()
设置一个带有前导空格的变量:
>>> setattr(x, ' foo', 'bar')
# ^^^^^^^^^^^^^^^^^^
>>> x.__dict__
{' foo': 'bar'}
# ^^^^^^^^^^^^^^^^^^
现在让我们执行相同的操作,直接赋值,而不使用 setattr()
:
>>> x. hello = 'bye'
# ^^^^^^^^^^^^^^^^
>>> x.__dict__
{' foo': 'bar', 'hello': 'bye'}
# ^^^^^
# leading spaces have been removed!
使用 instance.attribute = value
格式删除前导空格!
这最后一个行为似乎是 PEP 8 之后所需的行为。适应症:
Method Names and Instance Variables
Use the function naming rules: lowercase with words separated by underscores as necessary to improve readability.
但是,我们刚刚看到使用 setattr()
可以让我们绕过这个规则。此外,除非使用 getattr()
,否则无法获取带有前导空格的属性,就像它无法使用 instance.attr = 分配带有前导空格的变量一样。值
语法。
为什么允许这样做?
最佳答案
在第二种情况下没有任何空格,因为在解析阶段(在分配完成之前)所有空格都被丢弃。
考虑到 Python 对可读性的重视,这可以允许跨多行运行(在点后换行)并且仍然具有工作代码:
>>> str. \
... lower
<method 'lower' of 'str' objects>
关于python - 为什么要从属性名称的开头去除前导空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42134661/