可以在python中使用函数指针来减少类之间的依赖关系吗?

时间:2016-01-25 21:17:01

标签: python model-view-controller interface function-pointers

因此,在Java等语言中,在某些MVC模式中,通常使用接口来减少类之间的耦合。

在python中使用函数指针来实现相同的东西是合法的吗?

假设我们的MainFrame只需要一个控制器函数,你会在下面的代码中改变一些东西吗?还有一些潜在的问题吗?

class MainFrame(object):

    def __init__(self):
        self._listeners = []

    def fireEvent(self):
        for l in self._listeners:
            l()

    def addListener(self, funcPtr):
        self._listeners.append(funcPtr)


class Controller(object):

    def __init__(self):
        pass

    def eventRised(self):
        print "controller recived event"

def main():

    m = MainFrame()

    c = Controller()

    m.addListener(c.eventRised)

    m.fireEvent()

if __name__ == '__main__':
    main()

程序的输出是:

controller recived event

1 个答案:

答案 0 :(得分:1)

这是编写代码的完全合法的方式。这种方法称为回调。请注意,在Java中,使用类似于此的接口的模式实际上是由于其没有函数对象的历史限制。 Python没有这个缺点,因此您的解决方案将起作用。