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.
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.
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.
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:
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.
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.setter
decorator egy másik túlterhelés aname()
módszer tulajdonság-beállítási módszerként. Most a_name
védett.
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.
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:
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.')
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.
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++.
Leave a Reply