GeeksforGeeks

Előfeltétel: Aláhúzás Pythonban
A Pythonban nem léteznek “privát” példányváltozók, amelyekhez csak egy objektumon belül lehet hozzáférni. Azonban egy konvenciót követ a legtöbb Python kód és kódoló, azaz egy aláhúzással előtagolt nevet, pl. _geek, úgy kell kezelni, mint az API vagy bármely Python kód nem nyilvános részét, legyen az egy függvény, egy metódus vagy egy adattag. Miközben ezen végigmegyünk, megpróbálnánk megérteni az utána lévő aláhúzások különböző formáinak fogalmát is, pl. for _ in range(10), __init__(self).

Mangling és hogyan működik

A Pythonban van valami, amit névmanglingnak hívnak, ami azt jelenti, hogy az osztály-privát tagok érvényes felhasználási esetének korlátozott támogatása alapvetően az alosztályok által definiált nevekkel való névütközések elkerülésére szolgál. Minden __geek formájú azonosító (legalább két vezető aláhúzással vagy legfeljebb egy záró aláhúzással) helyébe _osztálynév__geek lép, ahol classname az aktuális osztály neve a vezető aláhúzás(ok) eltávolításával. Amíg ez az osztály definícióján belül történik, addig ez az átalakítás megtörténik. Ez hasznos ahhoz, hogy az alosztályok felülbírálhassák a metódusokat anélkül, hogy az osztályon belüli metódushívások megszakadnának.
Nézzük meg ezt a példát, és próbáljuk meg kideríteni, hogyan működik ez az aláhúzás:

A mangling-szabályok leginkább a balesetek elkerülésére szolgálnak, de ettől még lehetséges egy privátnak tekintett változóhoz hozzáférni vagy módosítani azt. Ez még különleges körülmények között is hasznos lehet, például a hibakeresőben.

Egyetlen élen álló aláhúzás

Azaz alapvetően egy aláhúzás egy metódus, függvény vagy adattag elején azt jelenti, hogy nem szabad hozzáférni ehhez a metódushoz, mert nem része az API-nak. Nézzük meg ezt a kódrészletet:

A részlet a Django forráskódjából származik (django/forms/forms.py). Ebből kiderül, hogy az errors egy tulajdonság, és ez is az API része, de a metódus, a _get_errors “privát”, tehát nem szabad hozzáférni.

__Kettős aláhúzás

A két aláhúzás az elején sok zavart okoz. Ez inkább a szintaxisról szól, mint egy konvencióról. a dupla aláhúzás az osztályok attribútumneveit csonkítja, hogy elkerülje az osztályok közötti attribútumnevek ütközését. Például:

__Kettős kezdő és kettős záró aláhúzás__

Van egy másik esete is a kettős kezdő és záró aláhúzásnak. Ezt speciális változók vagy metódusok (úgynevezett “magic method”) használatakor követjük, mint például__len__, __init__. Ezek a metódusok speciális szintaktikai jellemzőket biztosítanak a neveknek. Például a __file__ a Python-fájl helyét jelzi, a __eq__ akkor hajtódik végre, ha a == b kifejezést hajtjuk végre.
Példa:

Python

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



This article is contributed by Chinmoy Lenka. Ha tetszik a GeeksforGeeks és szeretnél hozzájárulni, írj cikket a contribute.geeksforgeeks.org címen, vagy küldd el cikkedet a [email protected] címre. Láthatod, hogy a cikked megjelenik a GeeksforGeeks főoldalán, és segíthetsz más geekeknek.
Hivatkoztam a Python Docs, a hackernoon.com és az igorsobreira.com oldalra
Kérlek, írj hozzászólást, ha bármi hibát találsz, vagy ha további információkat szeretnél megosztani a fent tárgyalt témával kapcsolatban.

Figyelem geek! Erősítse meg alapjait a Python programozási alaptanfolyammal, és tanulja meg az alapokat.

Az interjúra való felkészülés megkezdéséhez Fejlessze az adatszerkezetek fogalmait a Python DS tanfolyammal.

Cikkcímkék :