logo

Metodi privati ​​in Python

L'incapsulamento è uno dei concetti fondamentali in programmazione orientata agli oggetti (OOP) in Pitone. Descrive l'idea di racchiudere i dati e i metodi che funzionano sui dati all'interno di un'unità. Ciò pone restrizioni sull'accesso diretto a variabili e metodi e può impedire la modifica accidentale dei dati. Una classe è un esempio di incapsulamento poiché incapsula tutti i dati che ne fanno parte funzioni , variabili , ecc. Ora, possono esserci alcuni scenari in cui dobbiamo mettere restrizioni su alcuni metodi della classe in modo che non sia possibile accedervi né dall'esterno della classe né da eventuali sottoclassi. Per implementare questo entrano in gioco metodi privati.

Pfunzioni rivali in Python

Consideriamo un esempio di vita reale, il motore di un'auto, composto da molte parti come candele, valvole, pistoni, ecc. Nessun utente utilizza direttamente queste parti, piuttosto sa solo come utilizzare le parti che le utilizzano. Questo è lo scopo per cui vengono utilizzati i metodi privati. Viene utilizzato per nascondere la funzionalità interna di qualsiasi classe al mondo esterno. Metodi privati sono quei metodi a cui non è possibile accedere né dall'esterno della classe né da alcuna classe base. In Python non esistono metodi privati ​​a cui non è possibile accedere se non all'interno di una classe. Tuttavia, per definire un metodo privato, anteporre al nome del membro il suffisso doppia sottolineatura __ . Nota: Il metodo __init__ è a costruttore e viene eseguito non appena viene istanziato un oggetto di una classe.



Python3






la stringa contiene



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

>

albero binario vs albero di ricerca binario

>

Produzione:

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

L'esempio precedente mostra che ai metodi privati ​​della classe non è possibile accedere né dall'esterno della classe né da alcuna classe base. Tuttavia, è possibile accedere ai metodi privati ​​chiamando i metodi privati ​​tramite metodi pubblici.

Esempio:

Python3




stringa di input Java

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

>

>

Produzione:

Public method Private method>

Nome storpiato

Python fornisce una bacchetta magica che può essere utilizzata anche per chiamare metodi privati ​​al di fuori della classe, noto come mangling dei nomi. Significa che qualsiasi identificatore della forma __geek (almeno due caratteri di sottolineatura iniziali o al massimo un carattere di sottolineatura finale) viene sostituito con _classname__geek, dove il nome della classe è il nome della classe corrente con uno o più caratteri di sottolineatura iniziali eliminati.

Esempio:

Python3

differenza data Excel


scorciatoie di Linux



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

>

>

Produzione:

Private method>