2012-08-30 13 views

Odpowiedz

19

__...__ oznacza zastrzeżone Python nazwa (zarówno w nazwach plików, jak i w innych nazwach). Nie powinieneś wymyślać własnych nazw, używając notacji podwójnego podkreślenia; a jeśli używasz istniejącego, mają one specjalną funkcjonalność. W tym konkretnym przykładzie definiuje "główną" jednostkę dla pakietu; powoduje to również, że Python traktuje określony katalog jako pakiet. Jest to jednostka, która będzie używana po wywołaniu import cherryPy (i cherryPy jest katalogiem). Zostało to krótko wyjaśnione w Modules tutorial. Kolejnym przykładem jest metoda __eq__, która zapewnia porównanie równości dla klasy. Możesz wywoływać te metody bezpośrednio (i używać ich niejawnie podczas używania operatora ==); jednak nowsze wersje Pythona mogą definiować więcej takich metod, dlatego nie powinieneś wymyślać własnych nazw, ponieważ mogą one następnie kolidować. Możesz znaleźć dość szczegółową listę takich metod w dokumentach Data model.

_... jest często używany jako nazwa "wewnętrzna". Na przykład modułów rozpoczynających się od _ nie należy używać bezpośrednio; podobnie, metody z _ są rzekomo prywatne i tak dalej. To tylko konwencja, ale powinieneś ją uszanować.

+4

Nie masz wyraźnego zakazu wymyślania własnych nazw.Odradza się *, ponieważ język może dodać więcej takich nazw w przyszłości, więc przestrzeń nazw jest zarezerwowana. Używanie nazw "__...__" dla własnych projektów odbywa się na własne ryzyko. –

+2

@MartijnPieters: ok, zastąpił to "nie powinien". –

7

__init__.py to specjalny plik, który, gdy istnieje w folderze, zamienia ten folder w moduł. Po zaimportowaniu modułu zostaje wykonana __init__.py. Drugi to tylko konwencja nazewnictwa, ale przypuszczam, że to znaczy, że nie powinieneś bezpośrednio importować tego pliku.

Aby uzyskać więcej informacji na temat tworzenia modułów, zobacz: 6.4. Packages.

Zasada ogólna: Jeśli cokolwiek w Pythonie jest nazwane __anything__, jest to coś specjalnego i powinieneś przeczytać o nim przed jego użyciem (np. Funkcje magiczne).

11

Te, i inne, Konwencje nazewnictwa są opisane szczegółowo w Style Guide for Python Code - Descriptive: Naming Styles

krótko:

  • __double_leading_and_trailing_underscore__: Przedmioty lub cech, które żyją w nazw użytkowników kontrolowane „magicznych”. Na przykład. __init__, __import__ lub __file__. Nigdy nie wymyślaj takich imion; używaj ich tylko zgodnie z dokumentacją.
  • _single_leading_underscore: słaby wskaźnik "użytku wewnętrznego". Na przykład. from M import * nie importuje obiektów, których nazwa zaczyna się od podkreślenia.