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.