Innkapsling er et av de grunnleggende konseptene i objektorientert programmering (OOP) i Python. Den beskriver ideen om å pakke inn data og metodene som fungerer på data innenfor en enhet. Dette setter begrensninger på direkte tilgang til variabler og metoder og kan forhindre utilsiktet endring av data. En klasse er et eksempel på innkapsling da den innkapsler alle dataene som er medlem funksjoner , variabler , etc. Nå kan det være noen scenarier der vi må sette begrensninger på noen metoder i klassen slik at de verken kan nås utenfor klassen eller av noen underklasser. For å implementere dette kommer private metoder inn i bildet.
Private-funksjoner i Python
Tenk på et virkelighetseksempel, en bilmotor, som består av mange deler som tennplugger, ventiler, stempler osv. Ingen bruker bruker disse delene direkte, men de vet bare hvordan de skal bruke delene som bruker dem. Det er dette private metoder brukes til. Den brukes til å skjule den indre funksjonaliteten til enhver klasse fra omverdenen. Private metoder er de metodene som verken bør nås utenfor klassen eller av noen basisklasse. I Python finnes det ingen private metoder som ikke kan nås unntatt i en klasse. For å definere en privat metode, prefikser imidlertid medlemsnavnet med dobbel understreking __ . Merk: __init__ metoden er en konstruktør og kjører så snart et objekt i en klasse er instansiert.
Python3
huggorm full
# 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> |
>
firma vs selskap
>
Produksjon:
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'>
Eksemplet ovenfor viser at private metoder for klassen verken kan nås utenfor klassen eller av noen basisklasse. Private metoder kan imidlertid nås ved å ringe de private metodene via offentlige metoder.
Eksempel:
Python3
java versjon linux
# 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>()> |
>
>
Produksjon:
Public method Private method>
Navnemangling
Python gir en tryllestav som kan brukes til å kalle private metoder utenfor klassen også, det er kjent som navnemangling. Det betyr at en hvilken som helst identifikator av formen __geek (minst to innledende understreker eller høyst ett etterfølgende understrek) erstattes med _classname__geek, der klassenavnet er det gjeldende klassenavnet med en(e) innledende understrek(er) fjernet.
konverter nfa til dfa
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()> |
nginx-variabler
>
>
Produksjon:
Private method>