logo

Zasebne metode v Pythonu

Enkapsulacija je eden temeljnih konceptov v objektno orientirano programiranje (OOP) v Pythonu. Opisuje idejo ovijanja podatkov in metode, ki delujejo na podatkih znotraj ene enote. To postavlja omejitve pri neposrednem dostopu do spremenljivk in metod ter lahko prepreči nenamerno spreminjanje podatkov. Razred je primer enkapsulacije, saj enkapsulira vse podatke, ki so člani funkcije , spremenljivke , itd. Zdaj lahko pride do nekaterih scenarijev, v katerih moramo nekaterim metodam razreda postaviti omejitve, tako da do njih ni mogoče dostopati niti izven razreda niti s podrazredi. Za izvajanje te zasebne metode pridejo v poštev.

pfunkcije rivate v Pythonu

Razmislite o resničnem primeru, avtomobilskem motorju, ki je sestavljen iz številnih delov, kot so vžigalne svečke, ventili, bati itd. Noben uporabnik teh delov ne uporablja neposredno, temveč samo vedo, kako uporabiti dele, ki jih uporabljajo. Za to se uporabljajo zasebne metode. Uporablja se za skrivanje notranje funkcionalnosti katerega koli razreda pred zunanjim svetom. Zasebne metode so tiste metode, do katerih ne bi smeli dostopati niti zunaj razreda niti kateri koli osnovni razred. V Pythonu ni zasebnih metod, do katerih ni mogoče dostopati razen znotraj razreda. Če pa želite definirati zasebno metodo, imenu člana dodajte predpono dvojni podčrtaj __ . Opomba: Metoda __init__ je a konstruktor in se zažene takoj, ko je instanciran objekt razreda.

Python3






velikost besedila iz lateksa

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

>

kako dobiti iphone emojije na android

>

Izhod:

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

Zgornji primer kaže, da zasebnih metod razreda ni mogoče dostopati niti zunaj razreda niti s katerim koli osnovnim razredom. Vendar pa je do zasebnih metod mogoče dostopati s klicem zasebnih metod prek javnih metod.

primer:

Python3




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

pokliči funkcijo javascript iz html

>

java celo število

>

Izhod:

Public method Private method>

Manjkanje imena

Python ponuja čarobno paličico, ki jo je mogoče uporabiti za klicanje zasebnih metod tudi zunaj razreda, kar je znano kot spreminjanje imen. To pomeni, da se kateri koli identifikator v obliki __geek (vsaj dva podčrtaja na začetku ali največ en podčrtaj na koncu) nadomesti z _classname__geek, kjer je ime razreda trenutno ime razreda z odstranjenimi začetnimi podčrtaji.

primer:

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

java vnos

>

>

Izhod:

Private method>