1
假設我們在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適應症所需的一個:
方法名稱和實例變量
使用功能命名規則:小寫用下劃線必要分開的話,以提高可讀性。
但是,我們剛剛看到使用setattr()
允許我們規避這一規則。此外,除非使用getattr()
,否則無法使用前導空格獲得屬性,因爲它無法使用instance.attr = value
語法爲前導空格分配變量。
爲什麼允許這樣做?
沒有第二任何前導空格案件。解析器忽略空格 –