GeeksforGeeks

Precondiții: Underscore în Python
În Python, nu există existența variabilelor de instanță „Private” care nu pot fi accesate decât în interiorul unui obiect. Cu toate acestea, o convenție este urmată de majoritatea codurilor și programatorilor Python și anume, un nume prefixat cu o subliniere, De exemplu, _geek ar trebui să fie tratat ca o parte nepublică a API-ului sau a oricărui cod Python, fie că este o funcție, o metodă sau un membru de date. În timp ce parcurgem acest lucru, vom încerca, de asemenea, să înțelegem conceptul de diferite forme de sublinieri de sfârșit, de exemplu, for _ in range(10), __init__(self).

Mangling și cum funcționează

În Python, există ceva numit name mangling, ceea ce înseamnă că există un suport limitat pentru un caz de utilizare valabil pentru membrii class-private, practic pentru a evita ciocnirile de nume cu nume definite de subclase. Orice identificator de forma __geek (cel puțin două sublinieri de început sau cel mult o subliniere de sfârșit) este înlocuit cu _classname__geek, unde classname este numele clasei curente cu sublinierea (sublinierile) de început eliminată(e). Atâta timp cât apare în cadrul definiției clasei, această transformare este efectuată. Acest lucru este util pentru a permite subclaselor să suprascrie metode fără a întrerupe apelurile de metode în interiorul clasei.
Să ne uităm la acest exemplu și să încercăm să aflăm cum funcționează această subliniere:

Reguli de mangluire sunt concepute în principal pentru a evita accidentele, dar este totuși posibil să se acceseze sau să se modifice o variabilă care este considerată privată. Acest lucru poate fi chiar util în circumstanțe speciale, cum ar fi în debugger.

_Single Leading Underscores

Deci, practic, o subliniere la începutul unei metode, funcții sau membru de date înseamnă că nu ar trebui să accesați această metodă deoarece nu face parte din API. Să ne uităm la acest fragment de cod:

Sheppet-ul este preluat din codul sursă Django (django/forms/forms.py). Acest lucru sugerează că errors este o proprietate și face, de asemenea, parte din API, dar metoda, _get_errors, este „privată”, deci nu trebuie accesată.

__Double Leading Underscores

Două sublinieri, la început, provoacă multă confuzie. Este vorba mai degrabă de sintaxă decât de o convenție. sublinierile duble vor manevra numele atributelor unei clase pentru a evita conflictele de nume de atribute între clase. De exemplu:

__Double leading and Double trailing underscores__

Există un alt caz de dublă subliniere de început și sfârșit. Urmărim acest lucru în timp ce folosim variabile sau metode speciale (numite „metoda magică”), cum ar fi__len__, __init__. Aceste metode oferă caracteristici sintactice speciale numelor. De exemplu, __file__ indică locația fișierului Python, __eq__ se execută atunci când se execută expresia a == b.
Exemplu:

Python

.

classGeek:
def__init__(self, ab):
self.ab =ab
def__custom__(self):
pass



This article is contributed by Chinmoy Lenka. Dacă vă place GeeksforGeeks și doriți să contribuiți, puteți, de asemenea, să scrieți un articol folosind contribute.geeksforgeeks.org sau să trimiteți articolul dvs. prin e-mail la [email protected]. Vedeți articolul dumneavoastră apărând pe pagina principală GeeksforGeeks și ajutați alți Geeks.
Am făcut referire la Python Docs, hackernoon.com și igorsobreira.com
Vă rugăm să scrieți comentarii dacă găsiți ceva incorect, sau dacă doriți să împărtășiți mai multe informații despre subiectul discutat mai sus.

Atenție geek! Întărește-ți bazele cu cursul Python Programming Foundation și învață elementele de bază.

Pentru început, pregătirile pentru interviu Îmbunătățește-ți conceptele de Structuri de date cu cursul Python DS.

Articolul Tags :