Articles

Python – Veřejné, Chráněné, Soukromé Členy

Klasické objektově orientované jazyky, jako jsou C++ a Java, kontrolu přístupu do třídy zdroje veřejné, soukromé a chráněné klíčová slova. Soukromým členům třídy je odepřen přístup z prostředí mimo třídu. Lze s nimi manipulovat pouze ze třídy.

Veřejné Členy

Veřejné členy (obecně metody deklarované ve třídě) jsou přístupné z vnějšku třídy. Objekt stejné třídy je vyžadován pro vyvolání veřejné metody. Toto uspořádání proměnných soukromé instance a veřejných metod zajišťuje princip zapouzdření dat.

Všichni členové třídy Python jsou ve výchozím nastavení veřejné. Každý člen je přístupný mimo prostředí třídy.

Příklad: Public Atributy

Kopírovat

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

můžete přístup Student třídy, atributy a také měnit jejich hodnoty, jak je uvedeno níže.

příklad: Přístup k Veřejné Členy

Kopírovat

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

Chráněné Členy

Chráněné členy třídy jsou přístupné z v rámci třídy a jsou k dispozici také na jeho sub-třídy. Žádné jiné prostředí je povolen přístup k němu. To umožňuje zdědit specifické zdroje rodičovské třídy podřízenou třídou.

konvencí Pythonu, aby byla proměnná instance chráněna, je přidání předpony _ (jediné podtržítko). To účinně zabraňuje přístupu k němu, pokud není z podtřídy.

příklad: Chráněné Atributy

Kopírovat

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

Ve skutečnosti, to není zabránit proměnné instance v přístupu nebo úpravě instance. Stále můžete provádět následující operace:

Příklad: Přístup k Chráněné Členy

Kopírovat

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

Nicméně, můžete definovat vlastnost pomocí vlastnosti natěrač a je chráněn, jak je uvedeno níže.

příklad: Chráněné Atributy

Kopírovat

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

Výše, @property dekorátor se používá k výrobě name() metoda jako majetek a @name.setter dekoratér na další přetížení name() metoda jako vlastnost setter metody. Nyní je_name chráněn.

Příklad: Přístup k Chráněné Členy

Kopírovat

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

Výše, použili jsme std.name vlastnost upravit _name atribut. Je však stále přístupný v Pythonu. Odpovědný programátor by se proto zdržel přístupu a úpravy proměnných instance s předponou _ mimo svou třídu.

REKLAMA

Privátní Členy

Python nemá žádný mechanismus, který účinně omezuje přístup k jakékoliv instanci proměnné nebo metody. Python předepisuje úmluva z prefixu názvu proměnné/metody s jedním nebo dvojité podtržítko emulovat chování chráněné a soukromé přístupové specifikátory.

dvojité podtržítko __ s předponou proměnné je soukromé. Dává silný návrh, aby se ho nedotkl mimo třídu. Jakýkoliv pokus tak učinit bude mít za následek AttributeError:

Příklad: Soukromé Atributy

Kopírovat

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říklad:

Kopírovat

>>> 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 provádí jméno mandlování soukromé proměnné. Každý člen s dvojitým podtržítkem bude změněn na _object._class__variable. Takže je stále přístupný mimo třídu, ale praxe by se měla zdržet.

Příklad:

Kopírovat

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

Tak, Python poskytuje koncepční realizaci veřejné, chráněné a soukromé modifikátory přístupu, ale ne tak, jako jiné jazyky, jako je C#, Java, C++.