python中的委托

2024-05-16 03:38:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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')

Tags: selfevent示例ifinitdefclassparent
2条回答

这是基本的概念,是的-将一些传入的请求传递给另一个要处理的对象。

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

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

就说:

self.handler.Handle(event)

我不确定你在用你的Handler类做什么,你的例子中没有用到它。

在Python中,使用大写名称的方法是非常不寻常的,通常是移植一些使用类似名称的现有API的结果。

相关问题 更多 >