В языке программирования 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», то на экране появится «Саймон».
- В этом классе переменная-член по умолчанию доступна для общего использования, поэтому мы можем получить доступ к атрибутам класса «Учитель» и изменить их значения.
Вы можете обратиться к скриншоту ниже:
В разделе «Публичный доступ» мы также можем изменить значения параметров. Рассмотрим это на примере.
Пример:
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». Мы можем изменять любые значения, поскольку они были изменены.
Вы можете обратиться к скриншоту ниже.
Модификатор частного доступа
Двойное подчеркивание «__» делает переменную частной и защищенной. Это означает, что члены класса, объявленные как закрытые, доступны только внутри класса. Попытка получить доступ к ним извне класса приведет к ошибке.
Пример:
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 на примере, давайте объединим их все в одну программу, чтобы увидеть, как они работают вместе.
Пример:
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» общедоступной. Эта функция позволяет получить доступ к закрытым членам класса.
- Также у нас есть класс «Дочерний», который наследует свойства родительского класса. Он также может получить доступ к функциям защищённого члена класса «Учитель» — его родительского класса.
Вы можете обратиться к скриншоту ниже: