Классы в Python позволяют нам организовывать код, объединяя связанные данные и функции. В некоторых случаях мы можем захотеть запретить доступ к переменным извне класса. Python позволяет иметь приватные переменные в классах, чтобы предотвратить доступ пользователей к этим переменным. Приватные переменные определяются добавлением двух подчеркиваний (__) в начале имени переменной. В то время как публичные переменные могут быть напрямую доступны вне класса, приватные переменные недоступны. Давайте проиллюстрируем это:
class PublicPrivateExample:
def __init__(self):
self.public_var = 'I am public!' # Публичная переменная
self.__private_var = 'I am private!' # Приватная переменная
example = PublicPrivateExample()
print(example.public_var) # 'I am public!'
print(example.__private_var) # Вызывает AttributeError
В этом случае мы видим, что публичная переменная легко доступна. Однако, если мы попытаемся обратиться к приватной переменной, Python вызовет AttributeError.
Python не имеет строгих приватных членов, как другие языки, такие как Java или C++. В Python приватный член — это просто соглашение, которое предполагает, что не следует обращаться к члену напрямую. Python использует искажение имен (name mangling), чтобы снизить вероятность случайного доступа или изменения приватной переменной. Однако вы все же можете получить к ней доступ, если это необходимо, хотя это обычно не рекомендуется:
print(example._PublicPrivateExample__private_var) # I am private!
Доступ к приватной переменной осуществляется с помощью _ИмяКласса__имя_приватной_переменной. Это отговаривает от прямого доступа и поощряет инкапсуляцию. Вы должны предоставлять публичные методы, если хотите предоставить доступ к приватным переменным:
class PublicPrivateExample:
def __init__(self):
self.__private_var = 'I am private!'
def get_private_var(self): # Геттер для приватной переменной
return self.__private_var # Мы можем обращаться к приватным полям внутри класса
example = PublicPrivateExample()
print(example.get_private_var()) # Выведет 'I am private!'
Здесь мы используем публичный метод get_private_var, чтобы предоставить контролируемый способ доступа к нашей приватной переменной. Таким образом, мы сохраняем инкапсуляцию и целостность наших данных.
💭
Имейте в виду, что использование приватных переменных является частью практики инкапсуляции — одного из фундаментальных принципов объектно-ориентированного программирования. Это защищает данные от неожиданного изменения и доступа.
Поэтому, хотя Python не строго принуждает к использованию приватных переменных, это хорошая практика для повышения удобства сопровождения и надежности вашего кода.
Задача: Класс базы данных
Вам необходимо разработать класс Database на Python, который хранит пары name: value. База данных должна быть представлена как приватный словарь внутри класса Database.
Класс Database должен иметь следующие методы:
insert(name, value): Этот метод должен вставлять новую пару name: value в базу данных. Если name уже существует в базе данных, он должен вывести сообщение: Name already exists in the database..
delete(name): Этот метод должен удалять существующую пару name: value из базы данных. Если name не существует, он должен вывести сообщение: Name does not exist in the database..
update(name, value): Этот метод должен обновлять value существующего name в базе данных. Если name не существует, он должен вывести сообщение: Name does not exist in the database..
display(): Этот метод должен отображать все пары name: value в базе данных в формате name: value. Все значения должны быть разделены запятой с пробелом (, ).