Articles

Python – Public, Protected, Private Members

klassiset olio-orientoidut kielet, kuten C++ ja Java, hallitsevat luokkaresurssien käyttöä julkisilla, yksityisillä ja suojatuilla avainsanoilla. Luokan yksityisiltä jäseniltä evätään pääsy luokan ulkopuoliseen ympäristöön. Niitä voidaan käsitellä vain luokan sisällä.

julkiset jäsenet

julkiset jäsenet (yleensä luokassa ilmoitetut menetelmät) ovat saatavilla luokan ulkopuolelta. Saman luokan objektin on vedottava julkiseen menetelmään. Tämä yksityisten instanssimuuttujien ja julkisten menetelmien järjestely takaa datan kapseloinnin periaatteen.

kaikki Python-luokan jäsenet ovat oletusarvoisesti julkisia. Kuka tahansa jäsen pääsee luokkaympäristön ulkopuolelta.

esimerkki: julkiset attribuutit

Kopioi

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

voit käyttääStudent luokan attribuutteja ja myös muuttaa niiden arvoja, kuten alla on esitetty.

esimerkki: Access Public Members

Copy

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

suojatut jäsenet

luokan suojatut jäsenet ovat tavoitettavissa luokan sisältä ja ovat myös sen alaluokkien käytettävissä. Mikään muu ympäristö ei saa käyttää sitä. Tämä mahdollistaa sen, että vanhempainluokan tietyt resurssit periytyvät lapsiluokalta.

Pythonin tapa tehdä instanssimuuttuja suojattuna on lisätä siihen etuliite _ (yksittäinen alaviiva). Tämä estää tehokkaasti sen pääsyn, ellei se ole peräisin alaluokasta.

esimerkki: Suojatut attribuutit

Kopioi

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

itse asiassa tämä ei estä instanssimuuttujia pääsemästä instanssiin tai muokkaamasta sitä. Voit silti suorittaa seuraavat toiminnot:

esimerkki: Access Protected Members

Copy

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

voit kuitenkin määritellä kiinteistön käyttämällä property decoratoria ja tehdä siitä suojatun, kuten alla on esitetty.

esimerkki: Suojatut attribuutit

Kopioi

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

edellä @property decoratorista käytetäänname()method as property and@name.setterdecorator to another overloads of thename() method as property setter method. Nyt _name on suojeltu.

Example: Access Protected Members

Copy

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

Above, we used std.nameproperty to modify_nameattribute. Se on kuitenkin edelleen saatavilla Python-kielellä. Näin ollen vastuullinen ohjelmoija pidättäytyisi käyttämästä ja muokkaamasta _ – etuliitteen ilmentymämuuttujia luokkansa ulkopuolelta.

ADVERTISEMENT

Private Members

Pythonissa ei ole mekanismia, joka tehokkaasti rajoittaisi pääsyä mihinkään instanssimuuttujaan tai-menetelmään. Python määrää tavan, jolla muuttujan/menetelmän nimi prefixataan yhdellä tai kaksinkertaisella alleviivauksella, joka jäljittelee suojattujen ja yksityisten käyttöoikeusmääritteiden käyttäytymistä.

muuttujan etuliite __ tekee siitä yksityisen. Se antaa vahvan ehdotuksen olla koskematta siihen luokan ulkopuolelta. Jokainen yritys johtaa virhearvioon:

Example: Private Attributes

Copy

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

Example:

Copy

>>> 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 suorittaa yksityisten muuttujien Nimenmurskauksen. Jokainen jäsen, jolla on kaksinkertainen alaviiva, muuttuu muotoon _object._class__variable. Siihen pääsee siis edelleen luokan ulkopuolelta, mutta harjoittelusta pitäisi pidättäytyä.

esimerkki:

Kopioi

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

näin ollen Python tarjoaa käsitteellisen toteutuksen julkisille, suojatuille ja yksityisille access-muokkaajille, mutta ei muiden kielten kuten C#, Java, C++.