1

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, obj, 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等等。

4

0 回答 0