Мы можем наложить ограничения доступа на различные элементы данных и функции членов. Ограничения указываются с помощью модификаторов доступа. Модификаторы доступа – это уровни скрытой информации, скрывающей указанную для каждого члена данных или метода, определенного в классе.
В Python есть 3 типа модификаторов доступа:
- Публичный
- Защищенный
- Частный
Публичный
Публичные атрибуты – это те, которые могут быть доступны внутри класса и за пределами класса. В Python все атрибуты по умолчанию публично, если вы хотите изменить уровень доступа, вы должны установить его на этот атрибут.
Ниже приведен пример реализации модификатора публичного доступа:
class Vehicle: def __init__(self, name, speed): self.name = name #public data member self.speed=speed #public data member def display_name(self):#public method print("name:", self.name) my_vechile = Vehicle("USS Nautilus", 3000) my_vechile.display_name()
#Output name: USS Nautilus
В приведенном выше коде, название и скорость свойств, а также метод display_name являются публичными, поскольку к ним можно получить доступ в классе, а также за пределами класса.
Защищенные атрибуты могут быть доступны через класс, в котором они объявлены, или только его подклассы (полученные классы), и могут быть определены, добавив одно подчеркивание _ перед атрибутом класса.
Ниже приведена простая реализация для наследования защищенными атрибутами:
class Vehicle: #Parent class def __init__(self, name, speed): self._name = name #protected data member self._speed=speed #protected data member def _display_name(self): #protected data member print("name:", self._name) class Car(Vehicle): #Child class def __init__(self, name, speed, year): super().__init__(name, speed) #used super to point to parent class self.year=year #public data member def display_details(self): #protected method self._display_name() print("speed: ", self._speed) print("year:", self.year) my_car = Car("GMC Hummer EV", 300, 2020) my_car.display_details()
#Output name: GMC Hummer EV speed: 300 year: 2020
В приведенном выше коде у нас есть класс автомобилей, который наследует от Автомобиль Класс, и, как мы видим, могут легко получить доступ к транспортному транспортному средству из полученного класса Автомобиль Как свой собственный член год Анкет
Тем не менее, Python не полностью выполняет функциональность защищенного модификатора. Атрибут, определенный в вышеуказанной программе, доступен вне сферы действия класса. Это также может быть изменено.
Частные атрибуты не могут быть доступны непосредственно извне класса, но могут быть доступны изнутри класса.
Цель на частном уровне – скрывать данные от пользователей и других классов и может быть сделана, добавив Double Underscore __ перед именем атрибута.
class Vehicle: def __init__(self, name, speed): self.__name = name #private data member self.__speed = speed #private data member def __display_name(self): #private method print("name:", self.__name) def __display_speed(self): #private method print("speed:", self.__speed) def display_details(self): #public method self.__display_name() self.__display_speed() my_vehicle = Vehicle("USS Nautilus", 3000) my_vehicle.display_details()
#Output name: USS Nautilus speed: 3000
В приведенном выше коде мы объявили то же самое Средство передвижения учебный класс Но с частными данными тогда попытались получить доступ к ним изнутри и снаружи, и обнаружили, что это удалось, когда мы получили доступ к имени в display_name Метод, но он не удался, когда мы получили доступ к скорость снаружи класса.
Оригинал: “https://dev.to/mahmoudai/python-access-modifiers-3aoe”