Articles

Python-Public, Protected, Private Members

Klasyczne języki obiektowe, takie jak C++ i Java, kontrolują dostęp do zasobów klas za pomocą publicznych, prywatnych i chronionych słów kluczowych. Prywatni Członkowie klasy nie mają dostępu do środowiska poza klasą. Mogą być obsługiwane tylko z poziomu klasy.

Public Members

public members (ogólnie metody zadeklarowane w klasie) są dostępne spoza klasy. Obiekt tej samej klasy jest wymagany do wywołania metody publicznej. Taki układ zmiennych instancji prywatnych i metod publicznych zapewnia zasadę hermetyzacji danych.

wszyscy członkowie klasy Pythona są domyślnie publiczni. Każdy członek może być dostępny spoza środowiska klasy.

przykład: publiczne atrybuty

Kopiuj

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

możesz uzyskać dostęp do atrybutów klasyStudent, a także modyfikować ich wartości, jak pokazano poniżej.

przykład: Dostęp do członków publicznych

Kopiuj

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

chronione elementy

chronione elementy klasy są dostępne z poziomu klasy i są również dostępne dla jej podklas. Żadne inne środowisko nie ma do niego dostępu. Umożliwia to dziedziczenie określonych Zasobów klasy nadrzędnej przez klasę podrzędną.

konwencja Pythona, aby zmienna instancji była chroniona, polega na dodaniu do niej prefiksu _ (pojedynczego podkreślnika). To skutecznie uniemożliwia dostęp do niej, chyba że jest z podklasy.

przykład: Protected Attributes

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

w rzeczywistości nie uniemożliwia to dostępu do zmiennych instancji lub ich modyfikacji. Nadal możesz wykonać następujące operacje:

przykład: access Protected Members

Copy

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

jednak możesz zdefiniować właściwość za pomocą dekoratora właściwości i uczynić ją chronioną, jak pokazano poniżej.

przykład: Protected Attributes

Copy

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

powyżej, @property decorator służy do Ustawienia name() metody jako właściwości i @name.setter decorator do innego przeciążenia name() metoda jako metoda ustawiania właściwości. Teraz_name jest chroniony.

przykład: access Protected Members

Copy

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

powyżej użyliśmy std.namewłaściwości, aby zmodyfikować _name atrybut. Jednak nadal jest dostępny w Pythonie. Dlatego odpowiedzialny programista powstrzyma się od uzyskiwania dostępu i modyfikowania zmiennych instancji poprzedzonych _ spoza swojej klasy.

Reklama

członkowie prywatni

Python nie ma żadnego mechanizmu, który skutecznie ogranicza dostęp do dowolnej zmiennej instancji lub metody. Python określa konwencję prefiksowania nazwy zmiennej / metody pojedynczym lub podwójnym podkreśleniem, aby emulować zachowanie specyfikacji chronionego i prywatnego dostępu.

podwójne podkreślenie __ poprzedzone prefiksem do zmiennej sprawia, że jest ona prywatna. Daje silną sugestię, aby nie dotykać go spoza klasy. Każda próba tego spowoduje błąd AttributeError:

przykład: prywatne atrybuty

Kopiuj

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

przykład:

Kopiuj

Python wykonuje manipulowanie nazw zmiennych prywatnych. Każdy element z podwójnym podkreśleniem zostanie zmieniony na _object._class__variable. Tak więc nadal można uzyskać do niego dostęp spoza klasy, ale praktyka powinna być powstrzymana.

przykład:

Kopiuj

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

dlatego Python zapewnia koncepcyjną implementację publicznych, chronionych i prywatnych modyfikatorów dostępu, ale nie tak jak inne języki, takie jak C#, Java, C++.