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

Классы в 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, чтобы предоставить контролируемый способ доступа к нашей приватной переменной. Таким образом, мы сохраняем инкапсуляцию и целостность наших данных.

Задача: Класс базы данных

Вам необходимо разработать класс Database на Python, который хранит пары name: value. База данных должна быть представлена как приватный словарь внутри класса Database.

Класс Database должен иметь следующие методы:

  1. insert(name, value): Этот метод должен вставлять новую пару name: value в базу данных. Если name уже существует в базе данных, он должен вывести сообщение: Name already exists in the database..

  2. delete(name): Этот метод должен удалять существующую пару name: value из базы данных. Если name не существует, он должен вывести сообщение: Name does not exist in the database..

  3. update(name, value): Этот метод должен обновлять value существующего name в базе данных. Если name не существует, он должен вывести сообщение: Name does not exist in the database..

  4. 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: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

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