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

Инкапсуляция в Python

При работе с объектно-ориентированным языком программирования, такими как Python, инкапсуляция в Python является одним из 4 важных концепций для понимания. Другой

Автор оригинала: Pankaj Kumar.

Инкапсуляция в Python

При работе с объектно-ориентированным языком программирования, такими как Python, инкапсуляция в Python является одним из 4 важных концепций для понимания. Другие три наследства, полиморфизм и абстракция.

Что такое инкапсуляция?

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

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

Что такое инкапсуляция в Python?

Концепция инкапсуляции одинакова во всех объектных ориентированных языках программирования. Разница видна, когда концепции применяются к определенным языкам.

По сравнению с языками, такими как Java, которые предлагают модификаторы доступа (общедоступные или частные) для переменных и методов, Python обеспечивает доступ ко всем переменным и методам глобально.

Проверьте представление ниже демонстрации того, как доступны переменные.

class Person:
    def __init__(self, name, age=0):
        self.name = name
        self.age = age

    def display(self):
        print(self.name)
        print(self.age)

person = Person('Dev', 30)
#accessing using class method
person.display()
#accessing directly from outside
print(person.name)
print(person.age)

Выход

Dev
30
Dev
30

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

Методы для контроля доступа

Есть несколько методов, которые предлагаются Python, чтобы ограничить переменную и способ доступа к способу по всей программе. Давайте пойдем по методам подробно.

Используя один подчеркивание

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

Смотрите ниже пример:

class Person:
    def __init__(self, name, age=0):
        self.name = name
        self._age = age

    def display(self):
        print(self.name)
        print(self._age)

person = Person('Dev', 30)
#accessing using class method
person.display()
#accessing directly from outside
print(person.name)
print(person._age)

Выход

Dev
30
Dev
30

Понятно, что переменный доступ без изменений. Но мы можем сделать что-нибудь, чтобы действительно сделать его частным? Давайте посмотрим дальше.

Используя двойные подчеркивания

Если вы хотите сделать классные члены I.E. Методы и переменные частные, то вам следует префиснуть их с двойными подчеркиваниями. Но Python предлагает некоторую поддержку частным модификатором. Этот механизм называется Название поклонения Отказ С этим все еще можно получить доступ к членам класса снаружи его.

Название понравился

В Python любой идентификатор с __VAR переписан переводчиком Python Как _Classname__Var, и имя класса остается в качестве имени нынешнего класса. Этот механизм изменения имени называется Название поклонения в питоне.

В приведенном ниже примере у класса, возрастная переменная изменяется, и она префиксирована ведущими двойными подчеркиваниями.

class Person:
    def __init__(self, name, age=0):
        self.name = name
        self.__age = age

    def display(self):
        print(self.name)
        print(self.__age)

person = Person('Dev', 30)
#accessing using class method
person.display()
#accessing directly from outside
print('Trying to access variables from outside the class ')
print(person.name)
print(person.__age)

Выход

Dev
30
Trying to access variables from outside the class
Dev
Traceback (most recent call last):
  File "Person.py", line 16, in 
    print(person.__age)
AttributeError: 'Person' object has no attribute '__age'

Вы можете наблюдать, что переменные все еще доступны с использованием методов, что является частью класса. Но вы не можете получить доступ к возрасту непосредственно снаружи, так как она является частной переменной.

Использование методов Getter и Setter для доступа к частным переменным

Если вы хотите получить доступ и изменение частных переменных, следует использовать методы и мутаторы Accessor (Gotter) и мутаторы (методы сеттера), поскольку они являются частью класса.

class Person:
    def __init__(self, name, age=0):
        self.name = name
        self.__age = age

    def display(self):
        print(self.name)
        print(self.__age)

    def getAge(self):
        print(self.__age)

    def setAge(self, age):
        self.__age = age

person = Person('Dev', 30)
#accessing using class method
person.display()
#changing age using setter
person.setAge(35)
person.getAge()

Выход

Dev
30
35

Преимущества инкапсуляции в Python

Инкапсуляция не только обеспечивает лучший поток данных, но также защищает данные из внешних источников. Концепция инкапсуляции делает код самодостаточным. Это очень полезно на уровне реализации, поскольку оно приоритет от приоритеты «Как» в типе вопросы, оставляя за сложностью. Вы должны скрыть данные в устройстве, чтобы облегчить инкапсуляцию, а также защищать данные.

Что такое необходимость инкапсуляции в Python

Следующие причины показывают, почему разработчики находят инкапсуляцию удобно, и почему объектно-ориентированная концепция выкладывает множество языков программирования.

  • Инкапсуляция помогает достичь четко определенного взаимодействия в каждом приложении.
  • Объектно-ориентированная концепция сосредоточена на восстановлении кода в Python. (Сухой – не повторяйте себя).
  • Приложения могут быть надежно сохранены.
  • Он обеспечивает гибкость кода через правильную организацию кода.
  • Он способствует плавному опыту для пользователей, не подвергая любые задневшие сложности.
  • Это улучшает читаемость кода. Любые изменения в одной части кода не будут нарушать другую.
  • Инкапсуляция обеспечивает защиту данных и избегает доступа данных случайно. Защищенные данные могут быть доступны с описанными выше методами.

Инкапсуляция в Python в том, что данные скрыты за пределами определения объекта. Это позволяет разработчикам разрабатывать удобный опыт. Это также полезно для обеспечения данных из нарушений, поскольку код высоко закреплен и не может быть доступен внешним источником.

Ссылки: Классы Python и частные переменные