Соглашение о кодировании "частной" функции Python
Когда я пишу модуль Python и функции в нем, у меня есть некоторые "публичные" функции, которые должны быть доступны для посторонних, но есть и некоторые "частные" функции, которые должны рассматриваться и использоваться только локально и внутри.
Я понимаю, в Python нет абсолютно частных функций. Но каков наилучший, самый аккуратный или наиболее используемый стиль для разграничения "публичных" функций и "приватных" функций?
Я перечислю некоторые из известных мне стилей:
- использование
__all__
в файле модуля, чтобы указать его "публичные" функции (Для чего нужна переменная уровня модуля __all__ python?) - используйте подчеркивание в начале названия "приватных" функций
Есть ли другие идеи или соглашения, которые люди используют?
Большое спасибо!
1 ответ
Из документации модуля Python's Class:
Закрытые "переменные экземпляра, к которым нельзя получить доступ, кроме как изнутри объекта, не существуют в Python. Однако существует соглашение, которому следует большая часть кода Python: имя с префиксом подчеркивания (например, _spam) следует рассматривать как непубличную часть API (будь то функция, метод или элемент данных), Это следует считать деталями реализации и могут быть изменены без предварительного уведомления.
Поскольку существует действительный вариант использования для закрытых членов класса (а именно, чтобы избежать столкновения имен с именами, определенными подклассами), существует ограниченная поддержка такого механизма, называемого искажение имени. Любой идентификатор формы __spam (по крайней мере два начальных подчеркивания, самое большее одно конечное подчеркивание) заменяется в текстовом виде на _classname__spam, где classname - это имя текущего класса с удаленными начальными подчеркиваниями. Это искажение выполняется без учета синтаксической позиции идентификатора, если оно происходит в определении класса.