Python 3触发隐式值更改的回调

问题描述

只要对象callback的某些属性发生变化,我都希望调用A

我知道这个问题与Python中的观察者模式和描述符有关。但是,描述符似乎只能通过点访问来检测显式更改。

例如:

class Observer(object):
    def __init__(self,callback=None):
        self.__callback = callback

    def __set_name__(self,owner,name):
        self.__name = name
    
    def __set__(self,obj,value):
        obj.__dict__[self.__name] = value
        self.trigger()
    
    def __get__(self,type=None):
        return obj.__dict__.get(self.__name)
    
    def trigger(self):
        self.__callback()


def hello():
    print('hello')


class MyClass:
    data = Observer(hello)


a = MyClass()
a.data = [[1],2,3]
a.data.append(4)
a.data[0][0] = -1

在上面的代码中,仅对data的初始化调用一次回调。但是,我希望它被调用3次。我不希望使用描述符,但我确实希望该方法适用于任何数据类型,例如listdict等。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...