Kapselointi on yksi peruskäsitteistä olioohjelmointi (OOP) Pythonissa. Se kuvaa ajatusta tietojen käärimisestä ja menetelmistä, jotka toimivat datalla yhden yksikön sisällä. Tämä rajoittaa muuttujien ja menetelmien suoraa käyttöä ja voi estää tietojen tahattoman muuttamisen. Luokka on esimerkki kapseloinnista, koska se kapseloi kaiken datan, joka on jäsen toimintoja , muuttujia , jne. Nyt voi olla skenaarioita, joissa meidän on asetettava rajoituksia joillekin luokan menetelmille, jotta niihin ei pääse käsiksi luokan ulkopuolelta tai minkään aliluokan kautta. Tämän toteuttamiseksi yksityiset menetelmät tulevat peliin.
Private-funktiot Pythonissa
Ajatellaanpa tosielämän esimerkkiä, auton moottoria, joka koostuu monista osista, kuten sytytystulpista, venttiileistä, männistä jne. Kukaan käyttäjä ei käytä näitä osia suoraan, vaan he vain osaavat käyttää niitä käyttäviä osia. Tähän käytetään yksityisiä menetelmiä. Sitä käytetään piilottamaan minkä tahansa luokan sisäiset toiminnot ulkopuolelta. Yksityiset menetelmät ovat niitä menetelmiä, joita ei saa käyttää luokan ulkopuolelta eikä millään perusluokalla. Pythonissa ei ole olemassa yksityisiä menetelmiä, joita ei voi käyttää paitsi luokan sisällä. Kuitenkin, jos haluat määrittää yksityisen menetelmän, liitä jäsenen nimen eteen kaksinkertainen alaviiva __ . Huomautus: __init__-menetelmä on a rakentaja ja suoritetaan heti, kun luokan objekti on instantoitu.
Python 3
prioriteettijono c++
# 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> |
>
korvaa kaikki java
>
Lähtö:
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'>
Yllä oleva esimerkki osoittaa, että luokan yksityisiä menetelmiä ei voi käyttää luokan ulkopuolella eikä millään perusluokalla. Yksityisiin menetelmiin pääsee kuitenkin kutsumalla yksityisiä menetelmiä julkisten menetelmien kautta.
Esimerkki:
Python 3
kali linux terminaali
# 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>()> |
>
>
puun läpikulku
Lähtö:
Public method Private method>
Nimenmuokkaus
Python tarjoaa taikasauvan, jolla voidaan kutsua yksityisiä menetelmiä myös luokan ulkopuolelta, se tunnetaan nimellä nimimangling. Se tarkoittaa, että mikä tahansa muotoa __geek oleva tunniste (vähintään kaksi alaviivaa tai enintään yksi alaviiva) korvataan tunnuksella _classname__geek, jossa luokan nimi on nykyinen luokan nimi, josta on poistettu alaviiva(t).
Esimerkki:
Python 3
muuntaa merkkijono jsonobject javaksi
# 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()> |
>
>
Lähtö:
Private method>