В cherryPy
, например, есть файлы, такие как:Что такое префикс подчеркивания для имени файла python?
__init__.py
_cptools.py
Чем они отличаются? Что это значит?
В cherryPy
, например, есть файлы, такие как:Что такое префикс подчеркивания для имени файла python?
__init__.py
_cptools.py
Чем они отличаются? Что это значит?
__...__
средства зарезервированы Python имя (как в именах файлов, так и в других названиях). Вы не должны изобретать свои собственные имена, используя двойное обозначение; и если вы используете существующие, у них есть специальные функции.
В данном конкретном примере __init__.py
определяет «основное» устройство для упаковки; это также приводит к тому, что Python обрабатывает конкретный каталог как пакет. Это устройство, которое будет использоваться, когда вы вызываете import cherryPy
(и cherryPy
- это каталог). Это кратко объясняется в Modules tutorial.
Другим примером является метод __eq__
, который обеспечивает сравнение равенства для класса. Вы можете напрямую вызвать эти методы (и используете их неявно, например, при использовании оператора ==
); однако более новые версии Python могут определять больше таких методов, и поэтому вы не должны изобретать свои собственные имена __
, потому что они могут столкнуться. Вы можете найти довольно подробный список таких методов в документах Data model.
_...
часто используется как «внутреннее» имя. Например, модули, начинающиеся с _
, не должны использоваться напрямую; аналогично, методы с _
предположительно являются частными и так далее. Это просто конвенция, но вы должны ее уважать.
__init__.py
- это специальный файл, который, когда существующий в папке превращает эту папку в модуль. При импорте модуля выполняется __init__.py
. Другой - это просто соглашение об именах, но я бы предположил, что это скажет, что вы не должны импортировать этот файл напрямую.
Посмотрите здесь: 6.4. Packages для объяснения того, как создавать модули.
Общее правило: если что-либо в Python является namend __anything__
, то это что-то особенное, и вы должны прочитать об этом перед его использованием (например, магическими функциями).
Эти и другие, соглашения об именах подробно описаны в Style Guide for Python Code - Descriptive: Naming Styles
Кратко:
__double_leading_and_trailing_underscore__
: «магические» объекты или атрибуты, которые живут в контролируемых пользователем пространств имен. Например. __init__
, __import__
или __file__
. Никогда не изобретайте такие имена; используйте их только как задокументированные._single_leading_underscore
: слабый индикатор "внутреннего использования". Например. from M import *
не импортирует объекты, чье имя начинается с символа подчеркивания.
Вам прямо не запрещено создавать собственные имена.Это * обескуражено *, потому что язык может добавить больше таких имен в будущем, поэтому пространство имен зарезервировано. Использование имен '__...__' для ваших собственных проектов на свой страх и риск. –
@MartijnPieters: ОК, заменил его на «не должен». –