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

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

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

在Python中使用函数指针来实现同样的事情合法吗?

假设我们的 MainFrame 仅需要 Controller 的一项功能,您会更改下面代码中的某些内容吗?是否存在一些潜在问题?

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

最佳答案

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

关于python - python中可以使用函数指针来减少类之间的依赖关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35002527/

相关文章:

python - 如何检查关系是否存在?机对机

python - 两个整数之间的正则表达式

perl - 修改 Mojolicious 中的默认 Controller /模型路径

javascript - JavaScript 中的代码组织 : MVC? 自渲染组件?

java - Model 1 是 MVC 架构的子类吗?

python - 获取作为参数传递的内置函数的方法名称并在函数体内调用

Python:分部分读取文本文件

Xcode接口(interface): how to hide blue line on editor

java - 泛型类的注释参数

Java 将 <object> 列表转换到它的接口(interface)