Стиль кодирования (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), то я уверен, что он будет исправлен автоматически. В противном случае, возможно, зарегистрируйте ошибку с ними, чтобы увидеть это исправленное.