DevGang
Авторизоваться

Python – Как определить общедоступные, частные и защищенные переменные в классе

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

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

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

1. Публичные переменные

Публичные переменные — это наиболее доступный тип переменных. Доступ к ним можно получить откуда угодно, как внутри класса, так и за его пределами. В Python все переменные класса по умолчанию являются общедоступными, если явно не указано иное.

Пример:

class MyClass:
    def __init__(self, name):
        self.name = name  # Public variable

obj = MyClass("John")
print(obj.name)  # Accessible outside the class
#Output : John

В этом примере имя является общедоступной переменной. Вы можете получить к нему доступ и изменить его вне класса без каких-либо ограничений.

2. Защищенные переменные

Защищенные переменные предназначены для доступа только внутри класса и его подклассов. Хотя Python не обеспечивает строгого контроля доступа, соглашением о том, что переменная защищена, является добавление к ее имени одинарного подчеркивания (_).

Пример:

class MyClass:
    def __init__(self, name, age):
        self._age = age  # Protected variable

class ChildClass(MyClass):
    def display(self):
        print(f"Age: {self._age}")  # Accessible within a subclass

obj = ChildClass("John", 30)
obj.display()  
# Output: Age: 30

В этом примере возраст является защищенной переменной. Хотя Python не препятствует доступу к нему непосредственно за пределами класса, это противоречит его предполагаемому использованию.

3. Частные переменные

Приватные переменные предназначены для доступа только внутри класса, который их определяет. Python обозначает частные переменные, добавляя к имени переменной двойное подчеркивание (__). Это вызывает искажение имен, что затрудняет (но не делает невозможным) доступ к частным переменным извне класса.

Пример:

class MyClass:
    def __init__(self, name, age, salary):
        self.__salary = salary  # Private variable

    def display_salary(self):
        print(f"Salary: {self.__salary}")  # Accessible within the class

obj = MyClass("John", 30, 50000)
obj.display_salary()  # Output: Salary: 50000

# Trying to access the private variable outside the class
print(obj.__salary)  # Raises AttributeError

В этом примере зарплата является частной переменной. Если вы попытаетесь получить к нему доступ непосредственно извне класса, Python выдаст ошибку AttributeError. Тем не менее, вы все равно можете получить к нему доступ, используя версию с искаженным именем, хотя это не рекомендуется.

Пример искажения имени:

print(obj._MyClass__salary)  # Output: 50000

Эта строка кода демонстрирует, как внутренние переменные переименовываются, включая имя класса, что делает их менее доступными.

Заключение

Публичные переменные: доступны откуда угодно; никаких подчеркиваний.

Защищенные переменные: доступны внутри класса и его подклассов; с префиксом одиночного подчеркивания (_).

Частные переменные: доступны только внутри класса; с префиксом двойного подчеркивания (__).

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

Источник:

#Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу