Inkapsuliavimas yra viena iš pagrindinių sąvokų Objektinis programavimas (OOP) Python programoje. Jame aprašoma duomenų apvyniojimo idėja ir metodai, kurie veikia su duomenimis viename vienete. Tai apriboja tiesioginę prieigą prie kintamųjų ir metodų ir gali užkirsti kelią atsitiktiniam duomenų pakeitimui. Klasė yra inkapsuliavimo pavyzdys, nes ji apima visus duomenis, kurie yra narys funkcijas , kintamieji , ir tt Dabar gali būti kai kurių scenarijų, kai turime apriboti kai kuriuos klasės metodus, kad jų negalėtų pasiekti nei klasė, nei jokie poklasiai. Norint tai įgyvendinti, naudojami privatūs metodai.
Private funkcijas Python
Apsvarstykite realų pavyzdį – automobilio variklį, kuris sudarytas iš daugelio dalių, pvz., uždegimo žvakių, vožtuvų, stūmoklių ir kt. Nė vienas vartotojas nenaudoja šių dalių tiesiogiai, o tiesiog žino, kaip naudoti jas naudojančias dalis. Tam naudojami privatūs metodai. Jis naudojamas paslėpti bet kurios klasės vidinį funkcionalumą nuo išorinio pasaulio. Privatūs metodai yra tie metodai, kurių neturėtų pasiekti nei klasė, nei jokia bazinė klasė. „Python“ neegzistuoja privačių metodų, kurių nebūtų galima pasiekti tik klasėje. Tačiau norėdami apibrėžti privatų metodą, nario vardo priešdėlį įrašykite su dvigubas pabraukimas __ . Pastaba: __init__ metodas yra a konstruktorius ir paleidžiama, kai tik sukuriamas klasės objektas.
Python3
dydžio latekso šriftas
# 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> |
>
Parsisiųsti youtube video vlc
>
Išvestis:
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'>
Aukščiau pateiktas pavyzdys rodo, kad privatūs klasės metodai negali būti pasiekti nei klasėje, nei jokia bazinė klasė. Tačiau privačius metodus galima pasiekti iškvietus privačius metodus viešaisiais metodais.
Pavyzdys:
Python3
sujungti java eilutę
# 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>()> |
>
>
Išvestis:
Public method Private method>
Vardų sugadinimas
„Python“ suteikia stebuklingą lazdelę, kurią galima naudoti privatiems metodams iškviesti ir už klasės ribų, tai žinoma kaip vardų sugadinimas. Tai reiškia, kad bet koks formos __geek identifikatorius (bent du pirmieji pabraukimo brūkšniai arba daugiausia vienas paskutinis pabraukimas) pakeičiamas _classname__geek, kur klasės pavadinimas yra dabartinis klasės pavadinimas su išbrauktu (-iais) pabraukimu (-iais).
arraylist java rūšiuoti
Pavyzdys:
Python3
string in int
# 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()> |
>
>
Išvestis:
Private method>