Articles

Python-Offentlige, Beskyttede, Private Medlemmer

Klassiske objektorienterte språk, som C++ og Java, kontrollerer tilgangen til klasseressurser med offentlige, private og beskyttede søkeord. Private medlemmer av klassen nektes tilgang fra miljøet utenfor klassen. De kan bare håndteres fra klassen.

Offentlige Medlemmer

Offentlige medlemmer (vanligvis metoder deklarert i en klasse) er tilgjengelige fra utenfor klassen. Objektet av samme klasse er nødvendig for å påkalle en offentlig metode. Dette arrangementet av private instansvariabler og offentlige metoder sikrer prinsippet om datakapsling.

alle medlemmer i En Python-klasse er offentlige som standard. Ethvert medlem kan nås fra utenfor klassemiljøet.

Eksempel: Offentlige Attributter

Kopier

class Student: schoolName = 'XYZ School' # class attribute def __init__(self, name, age): self.name=name # instance attribute self.age=age # instance attribute

Du kan få tilgang til Student klassens attributter og også endre deres verdier, som vist nedenfor.

Eksempel: Tilgang Til Offentlige Medlemmer

Kopier

>>> std = Student("Steve", 25)>>> std.schoolName'XYZ School'>>> std.name'Steve'>>> std.age = 20>>> std.age25

Beskyttede Medlemmer

Beskyttede medlemmer av en klasse er tilgjengelige fra klassen og er også tilgjengelige for dens underklasser. Ingen andre miljø er tillatt tilgang til det. Dette gjør at bestemte ressurser i foreldreklassen kan arves av barneklassen.

Pythons konvensjon for å gjøre en instansvariabel beskyttet er å legge til et prefiks _ (enkelt understrek) til det. Dette forhindrer effektivt at det blir tilgang til, med mindre det er fra en underklasse.

Eksempel: Beskyttede Attributter

Kopier

class Student: _schoolName = 'XYZ School' # protected class attribute def __init__(self, name, age): self._name=name # protected instance attribute self._age=age # protected instance attribute

dette forhindrer faktisk ikke instansvariabler i å få tilgang til eller endre forekomsten. Du kan fortsatt utføre følgende operasjoner:

Eksempel: Access Protected Members

Copy

>>> std = Student("Swati", 25)>>> std._name'Swati'>>> std._name = 'Dipa'>>> std._name'Dipa'

du kan imidlertid definere en egenskap ved hjelp av property decorator og gjøre den beskyttet, som vist nedenfor.

Eksempel: Beskyttede Attributter

Kopier

class Student:def __init__(self,name):self._name = name@propertydef name(self):return [email protected] name(self,newname):self._name = newname

@property decorator brukes Til å gjøre name() metoden som egenskap og @name.setter dekoratør til en annen overbelastning av name() metode som egenskap setter metode. Nå er_name beskyttet.

Eksempel: Tilgang Beskyttede Medlemmer

Kopier

>>> std = Student("Swati")>>> std.name'Swati'>>> std.name = 'Dipa'>>> std.name'Dipa'>>> std._name # still accessible

Ovenfor brukte vi std.name egenskap for å endre _name attributt. Det er imidlertid fortsatt tilgjengelig I Python. Derfor vil den ansvarlige programmereren avstå fra å få tilgang til og endre instansvariabler prefiks med _ fra utenfor sin klasse.

ANNONSE

Private Medlemmer

Python har ingen mekanisme som effektivt begrenser tilgangen til noen instansvariabel eller metode. Python foreskriver en konvensjon om å prefiks navnet på variabelen / metoden med en enkelt eller dobbel understrek for å etterligne oppførselen til beskyttede og private tilgangsspesifikatorer.

dobbel understreking __ prefiks til en variabel gjør den privat. Det gir et sterkt forslag om ikke å berøre det fra utenfor klassen. Ethvert forsøk på å gjøre dette vil resultere i En AttributeError:

Eksempel: Private Attributter

Kopier

class Student: __schoolName = 'XYZ School' # private class attribute def __init__(self, name, age): self.__name=name # private instance attribute self.__salary=age # private instance attribute def __display(self): # private method print('This is private method.')

Eksempel:

Kopier

>>> std = Student("Bill", 25)>>> std.__schoolNameAttributeError: 'Student' object has no attribute '__schoolName'>>> std.__nameAttributeError: 'Student' object has no attribute '__name'>>> std.__display()AttributeError: 'Student' object has no attribute '__display'

python utfører Navn Mangling av private variabler. Hvert medlem med en dobbel understreking vil bli endret til _object._class__variable. Så det kan fortsatt nås fra utenfor klassen, men øvelsen bør avstå.

Eksempel:

Kopier

>>> std = Student("Bill", 25)>>> std._Student__name'Bill'>>> std._Student__name = 'Steve'>>> std._Student__name'Steve'>>> std._Student__display()'This is private method.'

Python gir dermed konseptuell implementering av offentlige, beskyttede og private tilgangsmodifikatorer, men ikke som andre språk som C#, Java, C++.