Стиль кодирования (PEP8) - Уровень модуля "dunders"
Определение "Dunder" (D ouble под): http://www.urbandictionary.com/define.php?term=Dunder
У меня возникает вопрос о размещении модулей уровня "dunders" (например, __all__
, __version__
, __author__
и т.д.) в коде Python.
Вопрос подошел ко мне, читая PEP8 и увидев этот Вопрос.
В принятом ответе говорится:
__author__
- глобальная "переменная" и поэтому должна отображаться ниже импорта.
Но в разделе PEP8 Имя домена на уровне модуля Я прочитал следующее:
Уровень модуля "dunders" (т.е. имена с двумя ведущими и двумя конечными подчеркивания), такие как __all__
, __author__
, __version__
и т.д. должны размещаться после модуля docstring, но перед любыми операциями импорта кроме импорта __future__
. Python требует, чтобы будущий импорт должен появиться в модуле перед любым другим кодом, кроме docstrings.
Авторы также приводят пример кода:
"""This is the example module.
This module does stuff.
"""
from __future__ import barry_as_FLUFL
__all__ = ['a', 'b', 'c']
__version__ = '0.1'
__author__ = 'Cardinal Biggles'
import os
import sys
Но когда я помещаю это в PyCharm, я вижу это предупреждение (также см. скриншот):
PEP8: импорт уровня модуля не поверх файла
![PyCharm игнорирует PEP8?]()
Вопрос: Каков правильный способ/место для хранения этих переменных с двойными символами подчеркивания?
Ответы
Ответ 1
Недавно PEP 8 был обновлен, чтобы разместить местоположение перед импортом. Смотрите версию cf8e888b9555, совершенную 7 июня 2016 года:
Отдохните __all__
.
Поместите все глушители уровня модуля в одном месте и удалите информация о резервной версии избыточной версии.
Закрывает # 27187. Патч Ян Ли.
Текст был далее обновлен на следующий день, чтобы ответить на предостережение from __future__ import ...
.
Патч ссылается на issue # 27187, который, в свою очередь, ссылается на эту pycodestyle
проблему, где было обнаружено, что PEP 8 неясен.
До этого изменения, поскольку не было четкого указания на глобальные глобулы на уровне модуля, поэтому PyCharm и другой ответ были правильными в то время. Я не уверен, как PyCharm реализует свои проверки PEP 8; если они используют проект pycodestyle (defacto Python style checker), то я уверен, что он будет исправлен автоматически. В противном случае, возможно, зарегистрируйте ошибку с ними, чтобы увидеть это исправленное.