Рубрики
Без рубрики

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

Быстрый взгляд на модификаторы доступа в Python с простыми фрагментами кода. Tagged с Python, OOP, учебник.

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

В 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”