W cherryPy
na przykład, istnieją pliki, takie jak:Co to jest prefiks podkreślenia dla nazwy pliku Pythona?
__init__.py
_cptools.py
Jak są one różne? Co to znaczy?
W cherryPy
na przykład, istnieją pliki, takie jak:Co to jest prefiks podkreślenia dla nazwy pliku Pythona?
__init__.py
_cptools.py
Jak są one różne? Co to znaczy?
__...__
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ć.
__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).
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.
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. –
@MartijnPieters: ok, zastąpił to "nie powinien". –