logo

Privātās metodes Python

Iekapsulēšana ir viens no pamatjēdzieniem objektorientētā programmēšana (OOP) programmā Python. Tajā ir aprakstīta ideja par datu iesaiņošanu un metodes, kas darbojas ar datiem vienā vienībā. Tas ierobežo tiešu piekļuvi mainīgajiem lielumiem un metodēm un var novērst nejaušu datu pārveidošanu. Klase ir iekapsulēšanas piemērs, jo tā iekapsulē visus datus, kas ir dalībnieks funkcijas , mainīgie , utt. Tagad var būt daži scenāriji, kuros mums ir jāievieto ierobežojumi dažām klases metodēm, lai tām nevarētu piekļūt ne ārpus klases, ne kādas apakšklases. Lai to īstenotu, tiek izmantotas privātas metodes.

Private funkcijas Python

Apsveriet reālu piemēru, automašīnas dzinēju, kas sastāv no daudzām daļām, piemēram, aizdedzes svecēm, vārstiem, virzuļiem utt. Neviens lietotājs neizmanto šīs daļas tieši, drīzāk viņi vienkārši zina, kā izmantot detaļas, kurās tās tiek izmantotas. Šim nolūkam tiek izmantotas privātās metodes. To izmanto, lai paslēptu jebkuras klases iekšējo funkcionalitāti no ārpasaules. Privātas metodes ir tās metodes, kurām nevajadzētu piekļūt ne ārpus klases, ne nevienai bāzes klasei. Programmā Python nav privātu metožu, kurām nevar piekļūt, izņemot klasi. Tomēr, lai definētu privāto metodi, pievieno dalībnieka vārda prefiksu ar dubultā pasvītra __ . Piezīme: __init__ metode ir a konstruktors un tiek palaists, tiklīdz klases objekts ir instantiēts.

Python3






css treknraksts

# 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

>

Izvade:

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

Iepriekš minētais piemērs parāda, ka klases privātajām metodēm nevar piekļūt ne ārpus klases, ne neviena bāzes klase. Tomēr privātajām metodēm var piekļūt, izsaucot privātās metodes, izmantojot publiskās metodes.

Piemērs:

Python3


intellij ideja vs aptumsums



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

>

>

Izvade:

Public method Private method>

Vārdu sagraušana

Python nodrošina burvju nūjiņu, ko var izmantot privāto metožu izsaukšanai arī ārpus klases, to sauc par nosaukumu izjaukšanu. Tas nozīmē, ka jebkurš formas __geek identifikators (vismaz divas sākuma pasvītras vai ne vairāk kā viena beigu pasvītra) tiek aizstāts ar _classname__geek, kur klases nosaukums ir pašreizējais klases nosaukums ar noņemtu(-ām) pasvītru(-ām).

Piemērs:

amrita rao aktieris

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

>

pitona izmērs

>

Izvade:

Private method>