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

Частные и публичные атрибуты в Python

❖ Введение Если вы знакомы с любыми другими языками программирования, такими как Java или C ++, вы, должно быть, вы должны были настроить условия частных атрибутов и публичных атрибутов. Они обычно известны как модификаторы доступа. На языках, таких как C ++ и Java, есть ключевые слова, используемые для ограничения и создания члена публики или … частные и публичные атрибуты в Python Подробнее »

Автор оригинала: 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, in 
    obj.__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/”