python中的观察者模式的实现-Signal#漂亮代码

2015-09-13  本文已影响260人  deeper
from django.contrib.auth.signals import user_logged_in

def update_last_login(sender, user, **kwargs):
    """
    A signal receiver which updates the last_login date for
    the user logging in.
    """
    user.last_login = timezone.now()
    user.save(update_fields=['last_login'])
user_logged_in.connect(update_last_login)

#signals.py
from django.dispatch import Signal
user_logged_in = Signal(providing_args=['request', 'user'])

也可以
from django.dispatch import receiver
@receiver(user_logged_in)
def update_last_login(sender, user, **kwargs):
      pass

可以继续参考网上其他博文12, 或者pydispatcher源代码

iOS中有类似的KVO和Notification方法, 我对notification的印象深刻,曾大量运用。我认识这可能是比异步回调更值得大规模推广的编程方法。我会期待着以后的编程语言在多线程,多进程,通知模式,松耦合上做出更多创新。如果我们把一段代码赋予的对象当做一种生命体的话,我们希望这些生命体之间可以对话。

记得几年前在学校做研究时,我当时就想把一个数理模型变成有社会参与者的multi-agent模型,后来未果,导致后来竟然转了行。我们能预见,并且偏好于对话机制。完全可以把虚拟世界中的对象也可以理解为实体,让它们产生对话,从而自动完成一些任务,完成对于未知的发现。

也可以想象,之后的python可能会原生支持内部的观察者模式。

上一篇下一篇

猜你喜欢

热点阅读