相关疑难解决方法(0)

在Python中实现可观察集合的推荐方法?

我希望在 Python 中有一些可观察的集合/序列,让我能够监听更改事件,例如添加新项目或更新项目:

list = ObservableList(['a','b','c'])
list.addChangeListener(lambda new_value: print(new_value))
list.append('a') # => should trigger the attached change listener

data_frame = ObservableDataFrame({'x': [1,2,3], 'y':[10,20,30]})
data_frame.addChangeListener(update_dependent_table_cells) # => allows to only update dependent cells instead of a whole table
Run Code Online (Sandbox Code Playgroud)

答:我发现以下项目提供了可观察集合的实现,并且看起来很有前途:

https://github.com/dimsf/Python-observable-collections

它做了我想要的:

from observablelist import ObservableList

def listHandler(event):
    if event.action == 'itemsUpdated':
        print event.action + ', old items: ' + str(event.oldItems) + ' new items: ' + str(event.newItems) + ' at index: ' + str(event.index)
    elif event.action == 'itemsAdded' or event.action == …
Run Code Online (Sandbox Code Playgroud)

python collections sequence observable observer-pattern

6
推荐指数
1
解决办法
1763
查看次数

使用装饰器在 Python3 中实现观察者模式

这个问题一般与观察者模式无关。它专注于在该模式中使用装饰器。该问题基于类似问题的答案

#!/usr/bin/env python3

class Observable:
    """
        The object that need to be observed. Alternative names are 'Subject'.
        In the most cases it is a data object.
    """
    def __init__(self):
        self._observers = []

    def register_observer(self, callback):
        self._observers.append(callback)
        return callback

    def _broadcast_observers(self, *args, **kwargs):
        for callback in self._observers:
            callback(*args, **kwargs)


class TheData(Observable):
    """
        Example of a data class just for demonstration.
    """
    def __init__(self, data):
        Observable.__init__(self)
        self._data = data

    @property
    def data(self):
        return self._data

    @data.setter
    def data(self, data):
        self._data = …
Run Code Online (Sandbox Code Playgroud)

python python-3.x observer-pattern python-decorators

1
推荐指数
1
解决办法
3349
查看次数