GeeksforGeeks
Wymagania wstępne: Underscore w Pythonie
W Pythonie nie istnieją „Prywatne” zmienne instancji, do których nie można uzyskać dostępu z wyjątkiem wewnątrz obiektu. Jednakże większość koderów Pythona stosuje pewną konwencję, tzn. nazwa poprzedzona podkreślnikiem, np. _geek, powinna być traktowana jako niepubliczna część API lub dowolnego kodu Pythona, niezależnie od tego, czy jest to funkcja, metoda, czy członek danych. Przechodząc przez to, spróbowalibyśmy również zrozumieć koncepcję różnych form kończących podkreślników, np. for _ in range(10), __init__(self).
Mangling i jak to działa
W Pythonie istnieje coś, co nazywa się manglingiem nazw, co oznacza, że istnieje ograniczone wsparcie dla ważnego przypadku użycia dla klas-prywatnych członków zasadniczo w celu uniknięcia zderzenia nazw z nazwami zdefiniowanymi przez podklasy. Każdy identyfikator w formie __geek (z co najmniej dwoma podkreślnikami na początku lub co najwyżej jednym podkreślnikiem na końcu) jest zastępowany _classname__geek, gdzie nazwa klasy jest bieżącą nazwą klasy z usuniętym podkreślnikiem(ami) na początku. Tak długo jak występuje to wewnątrz definicji klasy, tak długo jest to robione. Jest to pomocne w umożliwieniu podklasom nadpisywania metod bez łamania wewnątrzklasowych wywołań metod.
Spójrzmy na poniższy przykład i spróbujmy dowiedzieć się, jak działa to podkreślenie:
Zasady maglowania są zaprojektowane głównie w celu uniknięcia wypadków, ale nadal możliwe jest uzyskanie dostępu lub modyfikacja zmiennej, która jest uważana za prywatną. Może to być nawet przydatne w szczególnych okolicznościach, takich jak debugger.
Pojedynczy wiodący podkreślnik
Więc w zasadzie jedno podkreślenie na początku metody, funkcji lub członka danych oznacza, że nie powinieneś mieć dostępu do tej metody, ponieważ nie jest ona częścią API. Przyjrzyjmy się temu fragmentowi kodu:
Wycinek ten pochodzi z kodu źródłowego Django (django/forms/forms.py). Sugeruje on, że errors jest właściwością, a także częścią API, ale metoda _get_errors jest „prywatna”, więc nie należy się do niej odwoływać.
Podwójne podkreślenia
Dwa podkreślenia, na początku, powodują wiele zamieszania. Chodzi tu raczej o składnię niż o konwencję. Podwójne podkreślenie spowoduje zniekształcenie nazw atrybutów klasy, aby uniknąć konfliktu nazw atrybutów pomiędzy klasami. Na przykład:
__Double leading and Double trailing underscores__
Jest jeszcze jeden przypadek stosowania podwójnych wiodących i ciągnących podkreśleń. Stosujemy to podczas używania specjalnych zmiennych lub metod (zwanych „magic method”) takich jak__len__, __init__. Metody te nadają nazwom specjalne właściwości syntaktyczne. Na przykład, __file__ wskazuje lokalizację pliku Pythona, __eq__ jest wykonywane, gdy wykonywane jest wyrażenie a == b.
Przykład:
class
Geek:
def
__init__(
self
, ab):
self
.ab
=
ab
def
__custom__(
self
):
pass
This article is contributed by Chinmoy Lenka. Jeśli podoba Ci się GeeksforGeeks i chciałbyś wnieść swój wkład, możesz również napisać artykuł używając contribute.geeksforgeeks.org lub wysłać swój artykuł na adres [email protected]. Zobacz, jak Twój artykuł pojawia się na stronie głównej GeeksforGeeks i pomóż innym Geekom.
Odniosłem się do Python Docs, hackernoon.com i igorsobreira.com
Proszę pisać komentarze, jeśli znajdziesz coś niepoprawnego, lub chcesz podzielić się więcej informacji na temat omówiony powyżej.
Uwaga geek! Wzmocnij swoje fundamenty dzięki kursowi Python Programming Foundation i naucz się podstaw.
Na początek, przygotowania do rozmowy kwalifikacyjnej Wzmocnij swoje koncepcje struktur danych dzięki kursowi Python DS.