Inkapsling är ett av de grundläggande begreppen i objektorienterad programmering (OOP) i Python. Den beskriver idén med att packa in data och metoderna som fungerar på data inom en enhet. Detta sätter begränsningar för åtkomst till variabler och metoder direkt och kan förhindra oavsiktlig modifiering av data. En klass är ett exempel på inkapsling eftersom den kapslar in all data som är medlem funktioner , variabler , etc. Nu kan det finnas vissa scenarier där vi måste sätta restriktioner på vissa metoder i klassen så att de varken kan nås utanför klassen eller av några underklasser. För att implementera detta kommer privata metoder in i bilden.
Private-funktioner i Python
Tänk på ett verkligt exempel, en bilmotor, som består av många delar som tändstift, ventiler, kolvar, etc. Ingen användare använder dessa delar direkt, utan de vet bara hur man använder delarna som använder dem. Det är vad privata metoder används för. Det används för att dölja alla klassers inre funktionalitet från omvärlden. Privata metoder är de metoder som varken bör nås utanför klassen eller av någon basklass. I Python finns det ingen privata metoder som inte kan nås utom i en klass. Men för att definiera en privat metod prefix medlemsnamnet med dubbelt understreck __ . Notera: Metoden __init__ är en konstruktör och körs så snart ett objekt i en klass instansieras.
Python3
mysql infoga i
# 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
>
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'>
Exemplet ovan visar att privata metoder för klassen varken kan nås utanför klassen eller av någon basklass. Däremot kan privata metoder nås genom att anropa de privata metoderna via offentliga metoder.
Exempel:
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>()> |
gimp export som jpg
>
java dynamisk array
>
Produktion:
Public method Private method>
Namnmangling
Python tillhandahåller en trollstav som kan användas för att anropa privata metoder utanför klassen också, det är känt som namnmangling. Det betyder att alla identifierare av formen __geek (minst två inledande understreck eller högst ett efterföljande understreck) ersätts med _classname__geek, där klassnamnet är det aktuella klassnamnet med ett inledande understreck(s) avskalat.
Exempel:
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 strängformat långt
>
>
Produktion:
Private method>