python - 委托(delegate)在 python

标签 python design-patterns delegates

我已经实现了这个简短的示例来尝试演示一个简单的委托(delegate)模式。我的问题是。这看起来像我对授权的理解吗?

class Handler:
    def __init__(self, parent = None):
        self.parent = parent
    def Handle(self, event):
        handler = 'Handle_' +event
        if hasattr(self, handler):
            func = getattr(self, handler)
            func()
        elif self.parent:
            self.parent.Handle(event)

class Geo():
    def __init__(self, h):
        self.handler = h

    def Handle(self, event):
        func = getattr(self.handler, 'Handle')
        func(event)

class Steve():
    def __init__(self, h):
        self.handler = h

    def Handle(self, event):
        func = getattr(self.handler, 'Handle')
        func(event)

class Andy():
    def Handle(self, event):
        print 'Andy is handling %s' %(event)

if __name__ == '__main__':        
    a = Andy()
    s = Steve(a)
    g = Geo(s)
    g.Handle('lab on fire')

最佳答案

一个 Python 提示:你不需要说:

func = getattr(self.handler, 'Handle')
func(event)

就说:

self.handler.Handle(event)

我不确定您对 Handler 类做了什么,您的示例中没有使用它。

并且在 Python 中,具有大写名称的方法非常非常不常见,通常是移植一些具有这样名称的现有 API 的结果。

关于python - 委托(delegate)在 python ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3643538/

相关文章:

python - 使用 PySide 覆盖 paintEvent 的问题

python - 如何使用 python-xlib 读取 X 属性?

java - 带有可插入组件的应用程序的 OO 设计问题

java - Java个人项目,如何访问数据库?

c# - 有关如何清理此 API 的建议

c# - 调用者的许可与声明者的许可

python : UnicodeEncodeError: 'charmap' codec can't encode character '\u2190' in position 2936

python - 使用自定义 cmd 选项运行 web.py 应用程序

ios - Adcolony 委托(delegate)没有被调用

c# - 为什么包含命名参数会导致 "type arguments for method cannot be inferred from usage"错误?