Indkapsling er et af de grundlæggende begreber i objektorienteret programmering (OOP) i Python. Den beskriver ideen om at pakke data og de metoder, der arbejder på data inden for en enhed. Dette sætter begrænsninger for direkte adgang til variabler og metoder og kan forhindre utilsigtet ændring af data. En klasse er et eksempel på indkapsling, da den indkapsler alle de data, der er medlem funktioner , variabler , osv. Nu kan der være nogle scenarier, hvor vi er nødt til at sætte begrænsninger på nogle metoder i klassen, så de hverken kan tilgås uden for klassen eller af nogen underklasser. For at implementere dette kommer private metoder i spil.
Private-funktioner i Python
Overvej et eksempel fra det virkelige liv, en bilmotor, som består af mange dele som tændrør, ventiler, stempler osv. Ingen bruger bruger disse dele direkte, snarere ved de bare, hvordan de skal bruge de dele, der bruger dem. Det er hvad private metoder bruges til. Det bruges til at skjule den indre funktionalitet af enhver klasse fra omverdenen. Private metoder er de metoder, der hverken bør tilgås uden for klassen eller af nogen basisklasse. I Python findes der ingen private metoder, der ikke kan tilgås undtagen inde i en klasse. Men for at definere en privat metode præfikser medlemsnavnet med dobbelt understregning __ . Bemærk: __init__ metoden er en konstruktør og kører, så snart et objekt i en klasse er instantieret.
Python3
hugorm fuld
# 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> |
>
konvertering af int til streng i java
>
Produktion:
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'>
Ovenstående eksempel viser, at private metoder i klassen hverken kan tilgås uden for klassen eller af nogen basisklasse. Private metoder kan dog tilgås ved at kalde de private metoder via offentlige metoder.
Eksempel:
Python3
selen
# 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>()> |
>
>
Produktion:
Public method Private method>
Navnemangling
Python giver en tryllestav, der også kan bruges til at kalde private metoder uden for klassen, det er kendt som navnemangling. Det betyder, at enhver identifikator af formen __geek (mindst to foranstillede understregninger eller højst en efterliggende understregningstegn) erstattes med _classname__geek, hvor klassenavnet er det aktuelle klassenavn med en eller flere forreste understregninger fjernet.
java søvn
Eksempel:
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()> |
tegn til streng
>
>
Produktion:
Private method>