logo

Metode private în Python

Încapsularea este unul dintre conceptele fundamentale în programare orientată pe obiecte (OOP) în Python. Descrie ideea de împachetare a datelor și metodele care funcționează asupra datelor într-o unitate. Acest lucru impune restricții privind accesarea directă a variabilelor și metodelor și poate preveni modificarea accidentală a datelor. O clasă este un exemplu de încapsulare, deoarece încapsulează toate datele care sunt membre funcții , variabile , etc. Acum, pot exista unele scenarii în care trebuie să punem restricții asupra unor metode ale clasei, astfel încât acestea să nu poată fi accesate în afara clasei și nici de către orice subclase. Pentru a implementa acest lucru, intră în joc metodele private.

Pfuncții rivate în Python

Luați în considerare un exemplu real, un motor de mașină, care este alcătuit din multe piese, cum ar fi bujii, supape, pistoane etc. Niciun utilizator nu folosește aceste piese în mod direct, ci doar știu cum să folosească piesele care le folosesc. Pentru asta sunt folosite metodele private. Este folosit pentru a ascunde funcționalitatea interioară a oricărei clase de lumea exterioară. Metode private sunt acele metode care nu ar trebui accesate în afara clasei și nici de către orice clasă de bază. În Python, nu există metode private care să nu poată fi accesate decât în ​​interiorul unei clase. Cu toate acestea, pentru a defini o metodă privată, prefixați numele membrului subliniere dublă __ . Notă: Metoda __init__ este a constructor și rulează de îndată ce un obiect al unei clase este instanțiat.

Python3






execvp

# 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>

>

cum să obțineți emoji-uri iPhone pe Android

>

Ieșire:

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'>

Exemplul de mai sus arată că metodele private ale clasei nu pot fi accesate nici în afara clasei, nici de către nicio clasă de bază. Cu toate acestea, metodele private pot fi accesate prin apelarea metodelor private prin metode publice.

Exemplu:

Python3


converti boolean în șir



# 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>()>

>

>

Ieșire:

Public method Private method>

Deformarea numelui

Python oferă o baghetă magică care poate fi folosită pentru a apela metode private și în afara clasei, este cunoscută sub numele de deformare a numelor. Înseamnă că orice identificator de forma __geek (cel puțin două liniuțe de subliniere de început sau cel mult o liniuță de subliniere de sfârșit) este înlocuit cu _classname__geek, unde numele clasei este numele clasei curente cu liniuțele de subliniere de început eliminate.

Exemplu:

redenumiți în directorul linux

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()>

>

comunicare analogică

>

Ieșire:

Private method>