python - 为什么要从属性名称的开头去除前导空格?

标签 python naming-conventions

假设我们在 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/

相关文章:

oop - 类命名约定中的 'Storage' 和 'Repository' 之间有什么含义上的区别吗?

Go Getter 方法与字段,正确命名

python - 如何为 n 个输入生成 Banyan 网络

python - 这个函数中lambda函数的作用是什么,使用它有什么好处?

java - "send immediately"的单字命名约定

iOS MVC 模型命名约定

python - 如何使用 Spark 查找中位数和分位数

python - 用于简单 Web 应用程序的 Django

python - 使用 Pandas 基于正则表达式分离列数据

c++ - 命名(通用)线程安全数据结构?