GeeksforGeeks

Předpoklad: V jazyce Python neexistují „soukromé“ instanční proměnné, ke kterým nelze přistupovat jinak než uvnitř objektu. Většina kódu a programátorů Pythonu se však řídí konvencí, tj. název s předponou podtržítko, Například _geek, by měl být považován za neveřejnou část API nebo jakéhokoli kódu Pythonu, ať už se jedná o funkci, metodu nebo datový člen. Při procházení bychom se také snažili pochopit pojem různých forem koncového podtržítka, např. pro _ in range(10), __init__(self).

Mangling a jak funguje

V jazyce Python existuje něco, čemu se říká name mangling, což znamená, že existuje omezená podpora platného případu použití pro členy třídy-private v podstatě proto, aby se zabránilo kolizi jmen se jmény definovanými podtřídami. Jakýkoli identifikátor ve tvaru __geek (nejméně dvě počáteční podtržítka nebo nejvýše jedno koncové podtržítko) je nahrazen _jménem třídy__geek, kde jméno třídy je aktuální jméno třídy s odstraněným počátečním podtržítkem (podtržítky). Pokud se vyskytuje v rámci definice třídy, je toto zkomolení provedeno. To je užitečné pro umožnění přepisování metod podtřídami bez přerušení volání metod uvnitř třídy.
Podívejme se na tento příklad a zkusme zjistit, jak toto podtržítko funguje:

Pravidla pro manglování jsou navržena hlavně proto, aby se zabránilo nehodám, ale přesto je možné přistupovat k proměnné, která je považována za soukromou, nebo ji měnit. To může být dokonce užitečné za zvláštních okolností, například v ladicím programu.

Jednotlivé vedoucí podtržítko

Takže v podstatě jedno podtržítko na začátku metody, funkce nebo datového členu znamená, že byste k této metodě neměli přistupovat, protože není součástí API. Podívejme se na tento úryvek kódu:

Úryvek je převzat ze zdrojového kódu Djanga (django/forms/forms.py). Z toho vyplývá, že errors je vlastnost a je také součástí API, ale metoda _get_errors je „private“, takže by se k ní nemělo přistupovat.

__Dvojité vedoucí podtržítko

Dvě podtržítka, na začátku, způsobují mnoho zmatků. Jde spíše o syntaxi než o konvenci. dvojité podtržítko zkomolí názvy atributů třídy, aby nedocházelo ke konfliktům názvů atributů mezi třídami. Např:

__Dvojité počáteční a dvojité koncové podtržítko__

Existuje ještě jeden případ dvojitého počátečního a koncového podtržítka. Postupujeme tak při používání speciálních proměnných nebo metod (tzv. „magických metod“), jako jsou__len__, __init__. Tyto metody poskytují názvům speciální syntaktické vlastnosti. Například __file__ označuje umístění souboru v jazyce Python, __eq__ se provede, když se provede výraz a == b.
Příklad:

Python

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



This article is contributed by Chinmoy Lenka. Pokud se vám GeeksforGeeks líbí a chtěli byste přispět, můžete také napsat článek pomocí stránky contribute.geeksforgeeks.org nebo poslat svůj článek na adresu [email protected]. Uvidíte, jak se váš článek objeví na hlavní stránce GeeksforGeeks, a pomůžete tak ostatním geekům.
Odkázal jsem na Python Docs, hackernoon.com a igorsobreira.com
Prosím, napište komentář, pokud najdete něco nesprávného, nebo se chcete podělit o další informace k výše diskutovanému tématu.

Attention geek! Posilte své základy s kurzem Python Programming Foundation a naučte se základy.

Pro začátek přípravy na pohovor Posilte své pojetí datových struktur s kurzem Python DS.

Štítky článku :