Автор оригинала: Shubham Sayon.
❖ Введение
Если вы знакомы с любыми другими языками программирования, такие как Java или C ++, вам, должно быть, надо наступили условия Частные атрибуты и Общественные атрибуты Отказ Они обычно также известны как Модификаторы доступа Отказ На языках, таких как C ++ и Java, есть ключевые слова используется для ограничения и создания члена общественности или частным.
✏️ Модификаторы доступа используются для ограничения или контроля доступности классов ресурсов, объявляя их как Публичные, частные и защищенные Отказ
Но, ключевых словах, известных как Публичные, частные и защищенные в питоне. Следовательно, мы должны использовать определенные конвенции, чтобы ограничить членов.
Без дальнейшего ADO давайте просто погрузимся, чтобы узнать больше о модификаторах.
📚 Общественный атрибут в Python
- В Python каждый член класса является публичным по умолчанию.
- Публичные члены в классе могут быть доступны из любой точки за пределами класса.
- Вы можете получить доступ к членам государств, создавая объект класса.
Пример 1:
class Music: # Creating a constructor def __init__(self): self.genre = "Pop" self.singer = "Coldplay" # These are public attributes # Creating a function def foo(self): song = 'Hymn For The Weekend' return song # Creating object of the class m = Music() # Accessing the members inside the class print("Song: ", m.foo()) print("Genre:", m.genre) print("Singer:", m.singer)
Выход:
Song: Hymn For The Weekend Genre: Pop Singer: Coldplay
📝 Примечание : Даже полученный класс может получить доступ к государственным членам.
Пример 2:
📚 Частные атрибуты в Python
К сожалению, Python не имеет способа эффективно ограничивать доступ к переменным или методам экземпляра. 😟
Однако у нас есть обходной путь. Чтобы объявить участник в качестве частного в Python, вы должны использовать Двойной подчеркивает __
в качестве префикса к переменным. Частные участники ограничены в том же классе, то есть. Мы можем получить доступ к частным членам только в том же классе.
Пример:
class Music: # constructor def __init__(self): # These are private variables self.__genre = "Pop" self.__singer = "Coldplay" # private function def __func(self): print('Music: Hym For The Weekend') def foo(self): # Accessing private members of the class obj.__func() print("Genre:", obj.__genre) print("Singer:", obj.__singer) obj = Music() # Creating an object of the Music class obj.foo() # calling the private function
Выход:
Music: Hym For The Weekend Genre: Pop Singer: Coldplay
Объяснение:
В приведенном выше примере мы использовали Два подчеркивания перед идентификаторами (Я .__ Жанр
и Self .__ Singer
), чтобы сделать переменные частные. Точно так же та же конвенция использовалась для функции Func
который гарантировал, что это личный метод.
☠️. ОСТОРОЖНОСТЬ
Если вы попытаетесь получить доступ к частному участнику вне класса, вы получите AttributeError Отказ
Пример:
class Music: # constructor def __init__(self): # These are private variables self.__genre = "Pop" self.__singer = "Coldplay" # private function def __func(self): print('Music: Hym For The Weekend') def foo(self): # Accessing private members of the class print("Genre:", obj.__genre) print("Singer:", obj.__singer) # Creating object of the class obj = Music() # Trying to access the private attributes from outside the class obj.__func() print("Genre:", obj.__genre) print("Singer:", obj.__singer)
Выход:
Traceback (most recent call last): File "main.py", line 24, inobj.__func() AttributeError: 'Music' object has no attribute '__func'
Итак, это приносит нас к вопросу – Как получить доступ к частным атрибутам из-за пределов класса? Есть ли путь? 🤔
Когда вы используете двойную подчеркивание (например, __var
), Python играет с именем, давая его свойствам частного атрибута. Однако переменная все еще может быть доступна из-за пределов класса, используя его запутанное имя. Следовательно, это не строго личное.
Это приводит нас к очень важной концепции в Python – Название поклонницы. Вы можете получить доступ к частным атрибутам за пределами класса, используя имя Mangling.
✨ Название поклонницы в Python
Название Mangling – это процесс в Python, где, если есть метод, в любом случае, два подчеркивания перед именем, и при самых одного подчеркивания после имени он заменяется на _Classname
До этого, например, __method ()
становится _Classname__ Метод ()
Отказ Поскольку имя изменяется внутри интерпретатора, поэтому мы не можем получить доступ к переменной, использующему свое первоначальное имя, и именно то, как вы можете скрыть данные в Python.
Примечание: Название Mangling по сути используется, чтобы избежать переопределение Методы для родительских классов по унаследованным классам.
Давайте посмотрим на пример, чтобы понять, как предельные переменные доступны за пределами класса с помощью имен CARGLING:
# Defining a class class Music: # Creating a constructor def __init__(self): # These are private attributes self.__genre = "Pop" self.__singer = "Coldplay" # This is a public attribute self.releaseyear = 2000 # Creating a function def foo(self): print("Song: Trouble") # Creating object of the class obj = Music() # Calling the method inside the class obj.foo() # Accessing the private members outside the class using name mangling print("Genre:", obj._Music__genre) print("Singer:", obj._Music__singer) # Accessing the public member normally print("Year of release:", obj.releaseyear)
Выход:
Song: Trouble Genre: Pop Singer: Coldplay Year of release: 2000
📚 Защищенные атрибуты в Python
Вы можете получить доступ к защищенным атрибутам класса из класса, и они также могут быть доступны подклассы. Это облегчает наследство в Python.
Сделать переменную Защищенный, Вы должны добавить Одиночный подчеркивает (например _x
) в качестве префикса к нему. Чтобы сделать это действительно защищенным, вы также должны использовать декоратор недвижимости.
Пример:
# Defining a class class Music: def __init__(self): self._song = 'Trouble' @property def foo(self): return self._song @foo.setter def foo(self, new_song): # overloading foo self._song = new_song obj = Music() print('Song - ', obj.foo) obj.foo = 'Hym For The Weekend' print('New Song - ', obj.foo)
Выход:
Song - Trouble New Song - Hym For The Weekend
Объяснение:
@Property
Декоратор гарантировал, чтоfoo ()
Метод – это свойство.@ foo.setter
Декоратор позволил нам перегружатьfoo ()
метод. Теперь переменнаяпесня
защищен Но это
🚨 Тревога! – Вы все еще можете получить доступ к песне снаружи, используя obj._song
Отказ Таким образом, вы всегда должны избегать доступа или модификации переменных, префиксированных по _
снаружи класса.
❖ вывод
Таким образом, мы узнали о одном из самых важных концепций ООП в Python в этом руководстве, то есть, как вы можете использовать публичные, частные и защищенные атрибуты в Python.
Я надеюсь, что эта статья помогла вам. Пожалуйста, Оставайтесь настроиться и Подписаться Для более интересных дискуссий в будущем.
Авторы : 👨🎓 Шубхам Сайон 👩🎓 Rashi Agarwal
Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.
Вы можете связаться со мной @:
Оригинал: “https://blog.finxter.com/private-and-public-attributes-in-python/”