Articles

Python-Public, Protected, Private Members

Classical object-oriented languages, such as C++ and Java, control the access to class resources by public, private, and protected keywords. Az osztály privát tagjai nem férhetnek hozzá az osztályon kívüli környezetből. Ezeket csak az osztályból lehet kezelni.

Public Members

Public members (generally methods stated in a class) are accessible from outside the class. Ugyanannak az osztálynak a tárgya nyilvános módszer meghívásához szükséges. A magán példányváltozók és a nyilvános módszerek ezen elrendezése biztosítja az adatkapszuláció elvét.

a Python osztály minden tagja alapértelmezés szerint nyilvános. Bármely tag elérhető az osztálykörnyezeten kívülről.

példa: nyilvános attribútumok

Copy

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

elérheti aStudent osztály attribútumait, valamint módosíthatja értékeiket, az alábbiak szerint.

példa: Access Public Members

Copy

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

védett tagok

Az osztály védett tagjai az osztályból elérhetők, és az alosztályai számára is elérhetők. Más környezethez nem férhet hozzá. Ez lehetővé teszi, hogy a szülői osztály bizonyos erőforrásait a gyermekosztály örökölje.

Python egyezmény, hogy egy példány változó védett hozzá egy előtag _ (egyetlen aláhúzás) hozzá. Ez hatékonyan megakadályozza annak elérését, kivéve, ha egy alosztályból származik.

példa: Védett attribútumok

Copy

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

valójában ez nem akadályozza meg a példányváltozók elérését vagy módosítását. A következő műveleteket hajthatja végre:

példa: Access Protected Members

Copy

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

azonban meghatározhat egy tulajdonságot a property decorator segítségével, és védetté teheti azt az alábbiak szerint.

példa: Védett attribútumok

Copy

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

felett, @property decorator használják, hogy aname()módszer tulajdonságként és@name.setterdecorator egy másik túlterhelés aname() módszer tulajdonság-beállítási módszerként. Most a_name védett.

példa: Access Protected Members

Copy

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

fentstd.name tulajdonság módosítása_name. Azonban még mindig elérhető Python. Ezért a felelős programozó tartózkodjanak elérése, módosítása, például változók-ben a _ kívülről kategóriájában.

reklám

privát tagok

a Python nem rendelkezik olyan mechanizmussal, amely hatékonyan korlátozza a hozzáférést bármely példányváltozóhoz vagy módszerhez. A Python egy olyan konvenciót ír elő, amely a változó/módszer nevét egy vagy két aláhúzással előtagolja a védett és a privát hozzáférési specifikátorok viselkedésének emulálására.

a kettős aláhúzás __ egy változóhoz előtagolt privát. Erős javaslatot ad arra, hogy ne érintse meg az osztályon kívülről. Minden erre irányuló kísérlet következtében egy AttributeError:

Példa: Személyes Tulajdonságok

Másolás

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

Példa:

Másolás

>>> 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 végzi neve mangling privát változók. Minden Dupla aláhúzással rendelkező tag _object._class__variable – ra változik. Tehát még mindig elérhető az osztályon kívülről, de a gyakorlatot korlátozni kell.

példa:

Copy

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

így a Python a nyilvános, védett és privát hozzáférési módosítók koncepcionális megvalósítását biztosítja, de nem olyan, mint más nyelvek, mint a C#, Java, C++.