В языке программирования Python модификаторы доступа используются для изменения области видимости переменной по умолчанию. Существует три типа модификаторов доступа: public, private и protected.

В Python мы используем символ подчёркивания «_» для указания модификатора доступа к определённым членам данных и функциям-членам в классе.

Модификаторы доступа в Python играют важную роль в защите данных от несанкционированного доступа. При реализации наследования существует риск потери данных из-за передачи нежелательных данных из родительского класса в дочерний, поэтому использование модификаторов доступа является необходимым.

Содержание

Модификатор публичного доступа

Если в Python для модификатора доступа используется слово «public», то все члены класса по умолчанию становятся общедоступными. Это означает, что к любому члену класса, который объявлен как public, можно получить доступ извне класса через соответствующий объект.

Пример:

class Teacher:
def __init__(self,name,salary):
self.name=name
self.salary=salary
t1=Teacher("Simon", 12500)
print(t1.name)
  • После того как вы напишете приведённый выше код (код с модификатором публичного доступа в Python), если вы напечатаете «t1.name», то на экране появится «Саймон».
  • В этом классе переменная-член по умолчанию доступна для общего использования, поэтому мы можем получить доступ к атрибутам класса «Учитель» и изменить их значения.

Вы можете обратиться к скриншоту ниже:

Модификатор публичного доступа в Python

В разделе «Публичный доступ» мы также можем изменить значения параметров. Рассмотрим это на примере.

Пример:

class Teacher:
def __init__(self,name,salary):
self.name=name
self.salary=salary
t1=Teacher("Simon", 12500)
t1.name="Sam"
print(t1.name)

После того как вы написали код, показанный выше, и нажали кнопку «Выполнить», в консоли появится надпись «t1.name», а затем будет выведен результат — «Sam». Мы можем изменять любые значения, поскольку они были изменены.

Вы можете обратиться к скриншоту ниже.

Модификатор публичного доступа в Python

Модификатор частного доступа

Двойное подчеркивание «__» делает переменную частной и защищенной. Это означает, что члены класса, объявленные как закрытые, доступны только внутри класса. Попытка получить доступ к ним извне класса приведет к ошибке.

Пример:

class Teacher:
def __init__(self,name,salary):
self.__name=name
self.__salary=salary
t1=Teacher("Simon", 12500)
print(t1.__name)
  • После того как вы напишете приведённый выше код (модификатор частного доступа в Python), если вы напечатаете «t1.__name», то получите ошибку «AttributeError: объект ‘Учитель’ не имеет атрибута ‘__name’».
  • Мы попытались получить доступ к закрытым членам класса извне, поэтому возникла ошибка.

Вы можете обратиться к скриншоту ниже:

Ошибка

Чтобы получить доступ к закрытым членам класса, необходимо изменить имена частных переменных. Вместо каждого члена с двойным подчёркиванием следует использовать конструкцию «object._class__variable». После этого к этим членам можно будет получить доступ за пределами класса.

Пример:

class Teacher:
def __init__(self,name,salary):
self.__name=name
self.__salary=salary
t1=Teacher("Simon", 12500)
print(t1._Teacher__name)

После того как вы написали код, который был приведён выше, и запустили его, на экране появится надпись «t1._Teacher_name». В результате вы увидите слово «Саймон».

В этом примере мы можем получить доступ к закрытым переменным класса, не входя в него. Для этого нужно просто напечатать «object._class_variable».

Вы можете обратиться к скриншоту ниже:

доступ к закрытым переменным класса

Модификатор защищенного доступа

Защищённый член класса — это элемент, доступ к которому запрещён извне класса. Он обозначается одним подчёркиванием «_».

К защищённым членам класса имеют доступ другие члены этого же класса и классы, производные от него.

Пример:

class Teacher:
def __init__(self,name,salary):
self._name=name
self._salary=salary
t1=Teacher("Simon", 12500)
print(t1._name)
  • После того как вы напишете код, представленный выше (код для создания защищенного доступа в Python), при печати значения «t1._name» вы увидите на экране имя «Саймон».
  • Здесь мы использовали символ подчёркивания для обозначения имени переменной класса и зарплаты. Чтобы получить доступ к защищенным членам внешнего класса, мы можем использовать объект.

Вы можете обратиться к скриншоту ниже:

Модификатор защищенного доступа в Python

Пример

Теперь, когда мы рассмотрели каждый модификатор доступа Python на примере, давайте объединим их все в одну программу, чтобы увидеть, как они работают вместе.

Пример:

class Teacher:
val1 = None
_val2 = None
__val3 = None
def __init__(self, val1, val2, val3):
self.val1 = val1
self._val2 = val2
self.__val3 = val3
def dispPublicMembers(self):
print("This is public member: ", self.val1)
def _dispProtectedMembers(self):
print("This is protected member: ", self._val2)
def __dispPrivateMembers(self):
print("This is private member: ", self.__val3)
def accessPrivateMembers(self):
self.__dispPrivateMembers()
class Child(Teacher):
def __init__(self, val1, val2, val3):
Teacher.__init__(self, val1, val2, val3)
def accessProtectedMembers(self):
self._dispProtectedMembers()
obj1 = Child("Hello", "Simon", 100000)
obj1.dispPublicMembers()
obj1.accessProtectedMembers()
obj1.accessPrivateMembers()
  • После того как вы напишете код на Python, который был приведён выше, на экране появится надпись: «Hello Simon 100000».
  • В этом примере у нас есть родительский класс «Teacher» и производный класс «Child». Доступ к закрытым членам класса можно получить, сделав функцию-член «def accessPrivateMembers» общедоступной. Эта функция позволяет получить доступ к закрытым членам класса.
  • Также у нас есть класс «Дочерний», который наследует свойства родительского класса. Он также может получить доступ к функциям защищённого члена класса «Учитель» — его родительского класса.

Вы можете обратиться к скриншоту ниже:

Программа с использованием всех трёх вышеперечисленных модификаторов доступа на Python

Добавить комментарий