Я хотел бы создать класс, который ведет себя как переменная python, но вызывает некоторую функцию обратного вызова, когда «переменная» изменяется / читается.
Другими словами, я хотел бы иметь возможность использоватькласс следующим образом:
x=myClass(change_callback, read_callback)
определяет x как экземпляр myclass.Конструктор ( INIT ) принимает 2 функции в качестве параметра: функция, которая вызывается при каждом изменении x, и функция, которая вызывается при каждом «чтении» x
Следующее утверждение:
x=1
"сохранит" 1 и вызовет вызов change_callback(1)
, который может сделать что угодно.
Следующее утверждение:
a=x
получитсохраненное значение и вызов read_callback()
, который, возможно, изменит сохраненное значение и сделает другие вещи.
Я бы хотел, чтобы это работало с любым типом, например, чтобы иметь возможность писать такие вещи, как:
x=[1 2 3]
, который вызовет change_callback([1 2 3])
x.append(4)
вызовет change_callback([1 2 3 4])
(и, возможно, вызов read_callback()
раньше)
x={'a':1}
вызовет change_callback({'a':1})
print(x)
вызовет вызов read_callback () ... и, конечно, вернет последнее сохраненное значение для печати.
Идея состоит в том, что любой доступ к переменной может быть зарегистрирован, илигенерировать другие вычисления ... кажется, просто.
У меня такое ощущение, что это должно быть возможноно я действительно не вижу, от чего мой объект должен наследовать ... Если мне нужно ограничить меня одним типом, например списком, есть ли способ переопределить все операторы присваивания (включая такие методы, как append () ...) в один прием, сохраняя исходное поведение (метод базового класса) и добавляя обратный вызов ...
Или есть более подходящие способы (модули ...) для достижения тех же целей ...?
Заранее спасибо,