在python中通知事件的对象

时间:2019-06-13 01:16:32

标签: python events

我有一个主循环,可以完成一些工作并得出结果。

我希望其他对象能够注册,以便在有消耗结果时得到通知。

类似这样的东西:

consumers = []

def add_consumer(consumer):
    if consumer not in consumers:
        consumers.append(consumer)

while True:
    result = work()

    for consumer in consumers:
        consumer.consume(result)

由于其他人将能够定义自己的使用者,所以我不确定如何最好地布置代码,这样:

  • 很容易看出,需要实现invoke()方法
  • 通知者的通知过程很安全

  1. 最好让任何东西注册然后尝试通话吗?

赞:

for consumer in consumers:
    try:
        consumer.consume(result)
    except AttributeError:
        pass
  1. 使用Consumer抽象类(ABC)会更好,这样用户就更容易知道他们需要定义哪种方法?

  2. 如果建议采用ABC方式,我是否应该仍然尝试//除了invoke()调用或使用isinstance()之外?

for consumer in consumers:
    if isinstance(consumer, Consumer):
        consumer.consume(result)

0 个答案:

没有答案