2012-08-30 3 views

ответ

19

__...__ средства зарезервированы Python имя (как в именах файлов, так и в других названиях). Вы не должны изобретать свои собственные имена, используя двойное обозначение; и если вы используете существующие, у них есть специальные функции.

В данном конкретном примере __init__.py определяет «основное» устройство для упаковки; это также приводит к тому, что Python обрабатывает конкретный каталог как пакет. Это устройство, которое будет использоваться, когда вы вызываете import cherryPycherryPy - это каталог). Это кратко объясняется в Modules tutorial.

Другим примером является метод __eq__, который обеспечивает сравнение равенства для класса. Вы можете напрямую вызвать эти методы (и используете их неявно, например, при использовании оператора ==); однако более новые версии Python могут определять больше таких методов, и поэтому вы не должны изобретать свои собственные имена __, потому что они могут столкнуться. Вы можете найти довольно подробный список таких методов в документах Data model.

_... часто используется как «внутреннее» имя. Например, модули, начинающиеся с _, не должны использоваться напрямую; аналогично, методы с _ предположительно являются частными и так далее. Это просто конвенция, но вы должны ее уважать.

+4

Вам прямо не запрещено создавать собственные имена.Это * обескуражено *, потому что язык может добавить больше таких имен в будущем, поэтому пространство имен зарезервировано. Использование имен '__...__' для ваших собственных проектов на свой страх и риск. –

+2

@MartijnPieters: ОК, заменил его на «не должен». –

7

__init__.py - это специальный файл, который, когда существующий в папке превращает эту папку в модуль. При импорте модуля выполняется __init__.py. Другой - это просто соглашение об именах, но я бы предположил, что это скажет, что вы не должны импортировать этот файл напрямую.

Посмотрите здесь: 6.4. Packages для объяснения того, как создавать модули.

Общее правило: если что-либо в Python является namend __anything__, то это что-то особенное, и вы должны прочитать об этом перед его использованием (например, магическими функциями).

11

Эти и другие, соглашения об именах подробно описаны в Style Guide for Python Code - Descriptive: Naming Styles

Кратко:

  • __double_leading_and_trailing_underscore__: «магические» объекты или атрибуты, которые живут в контролируемых пользователем пространств имен. Например. __init__, __import__ или __file__. Никогда не изобретайте такие имена; используйте их только как задокументированные.
  • _single_leading_underscore: слабый индикатор "внутреннего использования". Например. from M import * не импортирует объекты, чье имя начинается с символа подчеркивания.
Смежные вопросы