logo

Mètodes privats en Python

L'encapsulació és un dels conceptes fonamentals programació orientada a objectes (POO) en Python. Descriu la idea d'embolcall de dades i els mètodes que funcionen amb dades dins d'una unitat. Això posa restriccions a l'accés directe a variables i mètodes i pot evitar la modificació accidental de les dades. Una classe és un exemple d'encapsulació, ja que encapsula totes les dades que són membres funcions , les variables , etc. Ara, hi pot haver alguns escenaris en què hem de posar restriccions a alguns mètodes de la classe perquè no es puguin accedir fora de la classe ni per cap subclasse. Per implementar això, entren en joc els mètodes privats.

Pfuncions rivalitzades a Python

Penseu en un exemple real, un motor d'automòbil, que està format per moltes peces com ara bugies, vàlvules, pistons, etc. Cap usuari fa servir aquestes peces directament, sinó que només saben com utilitzar les peces que les fan servir. Per això s'utilitzen els mètodes privats. S'utilitza per ocultar la funcionalitat interna de qualsevol classe del món exterior. Mètodes privats són aquells mètodes als quals no s'ha d'accedir fora de la classe ni cap classe base. A Python, no hi ha mètodes privats als quals no es pugui accedir excepte dins d'una classe. Tanmateix, per definir un mètode privat prefixeu el nom del membre amb el doble subratllat __ . Nota: El mètode __init__ és a constructor i s'executa tan bon punt s'instancia un objecte d'una classe.



Python 3






for loops 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>

>

convertir la data en cadena

>

Sortida:

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'exemple anterior mostra que els mètodes privats de la classe no es pot accedir fora de la classe ni per cap classe base. Tanmateix, es pot accedir als mètodes privats cridant als mètodes privats mitjançant mètodes públics.

Exemple:

Python 3

quina col·lecció en 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>()>

>

>

Sortida:

Public method Private method>

Manipulació de noms

Python proporciona una vareta màgica que es pot utilitzar per cridar mètodes privats fora de la classe també, es coneix com a manipulació de noms. Significa que qualsevol identificador de la forma __geek (almenys dos guions baixos inicials o com a màxim un guió baix al final) se substitueix per _classname__geek, on el nom de la classe és el nom de la classe actual amb un guió baix inicial eliminat.

qui va inventar l'escola

Exemple:

Python 3


tutorial hadoop



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

>

>

Sortida:

Private method>