Zapouzdření je jedním ze základních pojmů v objektově orientované programování (OOP) v Pythonu. Popisuje myšlenku zalamování dat a metody, které pracují s daty v rámci jedné jednotky. To omezuje přímý přístup k proměnným a metodám a může zabránit náhodné úpravě dat. Třída je příkladem zapouzdření, protože zapouzdřuje všechna data, která jsou členem funkcí , proměnné , atd. Nyní mohou nastat některé scénáře, ve kterých potřebujeme omezit některé metody třídy tak, aby k nim nebylo možné přistupovat mimo třídu ani žádné podtřídy. K implementaci této metody vstupují do hry soukromé metody.
Private funkce v Pythonu
Vezměme si příklad ze skutečného života, motor automobilu, který se skládá z mnoha částí, jako jsou zapalovací svíčky, ventily, písty atd. Žádný uživatel tyto části přímo nepoužívá, spíše jen ví, jak používat části, které je používají. K tomu se používají soukromé metody. Používá se ke skrytí vnitřní funkčnosti jakékoli třídy před vnějším světem. Soukromé metody jsou ty metody, které by neměly být přístupné mimo třídu ani žádnou základní třídou. V Pythonu neexistují žádné soukromé metody, ke kterým nelze přistupovat jinak než uvnitř třídy. Chcete-li však definovat soukromou metodu, předponou název člena znakem dvojité podtržení __ . Poznámka: Metoda __init__ je a konstruktér a spustí se, jakmile je vytvořena instance objektu třídy.
Python3
přepnout java
# Creating a Base class> class> Base:> ># Declaring public method> >def> fun(>self>):> >print>(>'Public method'>)> ># Declaring private method> >def> __fun(>self>):> >print>(>'Private method'>)> # Creating a derived class> class> Derived(Base):> >def> __init__(>self>):> ># Calling constructor of> ># Base class> >Base.__init__(>self>)> >def> call_public(>self>):> ># Calling public method of base class> >print>(>'
Inside derived class'>)> >self>.fun()> >def> call_private(>self>):> ># Calling private method of base class> >self>.__fun()> # Driver code> obj1>=> Base()> # Calling public method> obj1.fun()> obj2>=> Derived()> obj2.call_public()> # Uncommenting obj1.__fun() will> # raise an AttributeError> # Uncommenting obj2.call_private()> # will also raise an AttributeError> |
>
hashset vs hashmap
>
Výstup:
Public method Inside derived class Public method>
Traceback (most recent call last): File '/home/09d6f91fdb63d16200e172c7a925dd7f.py', line 43, in obj1.__fun() AttributeError: 'Base' object has no attribute '__fun' Traceback (most recent call last): File '/home/0d5506bab8f06cb7c842501d9704557b.py', line 46, in obj2.call_private() File '/home/0d5506bab8f06cb7c842501d9704557b.py', line 32, in call_private self.__fun() AttributeError: 'Derived' object has no attribute '_Derived__fun'>
Výše uvedený příklad ukazuje, že k soukromým metodám třídy nelze přistupovat mimo třídu ani žádnou základní třídou. K soukromým metodám však lze přistupovat voláním soukromých metod prostřednictvím veřejných metod.
Příklad:
Python3
návrh databáze v dbms
# Creating a class> class> A:> ># Declaring public method> >def> fun(>self>):> >print>(>'Public method'>)> ># Declaring private method> >def> __fun(>self>):> >print>(>'Private method'>)> ># Calling private method via> ># another method> >def> Help>(>self>):> >self>.fun()> >self>.__fun()> # Driver's code> obj>=> A()> obj.>Help>()> |
>
>
Výstup:
Public method Private method>
Mandlování jmen
Python poskytuje kouzelnou hůlku, kterou lze použít k volání soukromých metod i mimo třídu, je to známé jako mangling jmen. Znamená to, že jakýkoli identifikátor ve tvaru __geek (alespoň dvě podtržítka na začátku nebo maximálně jedno podtržítko na konci) je nahrazen _classname__geek, kde název třídy je aktuální název třídy s odstraněným podtržítkem na začátku.
Příklad:
náhodné číslo c kód
Python3
# Creating a class> class> A:> ># Declaring public method> >def> fun(>self>):> >print>(>'Public method'>)> ># Declaring private method> >def> __fun(>self>):> >print>(>'Private method'>)> # Driver's code> obj>=> A()> # Calling the private member> # through name mangling> obj._A__fun()> |
>
co znamená xdxd
>
Výstup:
Private method>