相关疑难解决方法(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
查看次数

在python中实现观察者模式的替代方法

我正想通过后有关如何观察者模式可以在Python中实现.在同一篇文章中有这些评论.

1)在python中你也可以只使用普通函数,"观察者"类并不是真正需要的.

2)这是Java程序员在切换到Python后尝试做的很好的例子 - 他们觉得Python缺少所有垃圾并尝试"移植"它.

这些注释暗示观察者模式在python中并不真正有用,并且存在其他方法来实现相同的效果.这是真的,如果能做到这一点?

这是观察者模式的代码:

class Observable(object):

    def __init__(self):
        self.observers = []

    def register(self, observer):
        if not observer in self.observers:
            self.observers.append(observer)

    def unregister(self, observer):
        if observer in self.observers:
            self.observers.remove(observer)

    def unregister_all(self):
        if self.observers:
            del self.observers[:]

    def update_observers(self, *args, **kwargs):
        for observer in self.observers:
            observer.update(*args, **kwargs)

from abc import ABCMeta, abstractmethod

class Observer(object):
    __metaclass__ = ABCMeta

    @abstractmethod
    def update(self, *args, **kwargs):
        pass

class AmericanStockMarket(Observer):
    def update(self, *args, **kwargs):
        print("American stock market received: {0}\n{1}".format(args, kwargs))

class EuropeanStockMarket(Observer):
    def …
Run Code Online (Sandbox Code Playgroud)

python first-class-functions observer-pattern

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