Приватные переменные в классах

Классы в 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 должен иметь следующие методы:
  1. insert(name, value): Этот метод должен вставлять новую пару name: value в базу данных. Если name уже существует в базе данных, он должен вывести сообщение: Name already exists in the database..
  1. delete(name): Этот метод должен удалять существующую пару name: value из базы данных. Если name не существует, он должен вывести сообщение: Name does not exist in the database..
  1. update(name, value): Этот метод должен обновлять value существующего name в базе данных. Если name не существует, он должен вывести сообщение: Name does not exist in the database..
  1. display(): Этот метод должен отображать все пары name: value в базе данных в формате name: value. Все значения должны быть разделены запятой с пробелом (, ).
Входные данные
Выходные данные
db = Database(); db.insert('Bob', 23); db.insert('Alice', 25); db.update('Bob', 24); db.display(); db.delete('Alice'); db.display();
Bob: 24, Alice: 25 Bob: 24
 

Constraints

Time limit: 1 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue