感觉是全新的学习了。

因为在以前的工作中,并没有有意识的去运用哪一种编程模式。

以后要注意的了。

这才是高手之路呀~

class Event:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return self.name

class Widget:
    def __init__(self, parent=None):
        self.parent = parent

    def handle(self, event):
        handler = 'handle_{}'.format(event)
        if hasattr(self, handler):
            method = getattr(self, handler)
            method(event)
        elif self.parent:
            self.parent.handle(event)
        elif hasattr(self, 'handle_default'):
            self.handle_default(event)

class MainWindow(Widget):
    def handle_close(self, event):
        print('MainWindow: {}'.format(event))

    def handle_default(self, event):
        print('MainWindows Default: {}'.format(event))

class SendDialog(Widget):
    def handle_paint(self, event):
       print('SendDialog : {}'.format(event))

class MsgText(Widget):
    def handle_down(self, event):
        print('MsgText: {}'.format(event))

def main():
    mw = MainWindow()
    sd = SendDialog(mw)
    msg = MsgText(sd)

    for e in ('down', 'paint', 'unhandled', 'close'):
        evt = Event(e)
        print('\nSending event - {} - to MainWindow'.format(evt))
        mw.handle(evt)
        print('\nSending event - {} - to SendDialog'.format(evt))
        sd.handle(evt)
        print('\nSending event - {} - to MsgText'.format(evt))
        msg.handle(evt)

if __name__ == '__main__':
    main()

最新文章

  1. K2新网站(官网和BPM社区)正式上线了
  2. JavaScript Cookies
  3. Django~urls.py--->views.py
  4. web设计经验<四>设计师必备的20条设计黄金法则
  5. 如何评估oracle AWR 的在oracle 中的存储情况
  6. poj 2117 Electricity
  7. Android系统更改状态栏字体颜色
  8. hudson
  9. iOS-如何使用symbolicatecrash
  10. 201521123089 《Java程序设计》第12周学习总结
  11. android notification,notificationmanager详解
  12. CF Manthan, Codefest 16 B. A Trivial Problem
  13. subprocess模块 sys模块
  14. WWSSN instrument response
  15. I2C和I2S的区别和使用方法
  16. PHP遍历数组常用方式(for,foreach,while,指针等等)
  17. Mongo如何导出 CSV文件
  18. 撩课-Web大前端每天5道面试题-Day4
  19. Oracle 统计信息
  20. 已知问题汇总 (2013-11-30) - QQ空间, EXTJS

热门文章

  1. Jenkins和Gitblit集成实现提交后自动构建
  2. 解决Pytohn安装第三方库出现read timed out 问题
  3. NAT—网络地址转换
  4. 使用IDEA复用代码时常见问题
  5. python---django的模块简便使用
  6. linux下常用的几个时间函数:time,gettimeofday,clock_gettime,_ftime
  7. SQL Server 属性不匹配。存在属性(Directory, Archive),包括属性(0),不包括属性(Archive, Compressed, Encrypted)
  8. poj 3216 Repairing Company
  9. 在传统的ADO.NET中使用事务
  10. VM虚拟机上连接usb无反映