@Wynell_ru

Как отловить изменение словаря в Python?

Здравствуйте.
Наверняка вам в голову сразу же пришло это:
class State:
    def __init__(self, user_id):
        self.__set_state(user_id)

    def __get_state(self):
        return self.__a

    def __set_state(self, state):
        self.__a = state

    a = property(__get_state, __set_state)

state = State(5)
state.a = 10
state.a # 10

Но, увы, я не могу таким же образом работать и со словарями: при попытке
state = State({'a': "B", 'C': "d"})
state.a['C'] = 8 # TypeError: 'State' object does not support item assignment

выдает TypeError: 'State' object does not support item assignment

P.S. Геттер мне тоже нужен. Не только сеттер.
  • Вопрос задан
  • 193 просмотра
Решения вопроса 1
Создай класс, который будет наследоваться от dict, и переопредели метод __setitem__.
Пример:
class NameClass(dict):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.__status_message = kwargs.get("status_message")

    def __setitem__(self, key, value):
        super().__setitem__(key, value)
        if self.__status_message:
            print("Я изменил словарь")
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы