C钩子管理器应该是%pythoncode类还是其他类?

C钩子管理器应该是%pythoncode类还是其他类?,python,swig,python-embedding,Python,Swig,Python Embedding,我正在使用SWIG将Python脚本添加到C程序中。该程序是一个文本编辑器,具有面向“命令”的体系结构:定义了各种命令,例如:(枚举标签):复制,粘贴,剪切,向上,向下,左,左,右,退格,删除, PageUp,PageDown,主页,结束,选项卡,撤消,重做等等 我认为Python脚本的一个有用特性是在任何命令之前/之后运行钩子,即:在应用程序Python模块(称为myapp)中注册的Python可调用项,然后在适当的时候从C代码运行 但是这样的钩子机制将是一项大量的工作,因此我希望通过%pyt

我正在使用SWIG将Python脚本添加到C程序中。该程序是一个文本编辑器,具有面向“命令”的体系结构:定义了各种命令,例如:(枚举标签):
复制
粘贴
剪切
向上
向下
退格
删除
PageUp
PageDown
主页
结束
选项卡
撤消
重做
等等

我认为Python脚本的一个有用特性是在任何命令之前/之后运行钩子,即:在应用程序Python模块(称为
myapp
)中注册的Python可调用项,然后在适当的时候从C代码运行

但是这样的钩子机制将是一项大量的工作,因此我希望通过
%pythoncode{…}
在Python中实现尽可能多的钩子机制。这就是我目前拥有的:

from collections import namedtuple

Hook = namedtuple('Hook', 'mc_cmd callback run_after')

class HookKinds:
    def __init__(self, before, after):
        self.before = before
        self.after = after

class HookMgr:
    def __init__(self):
        self._hooks = {}

    def reg(self, mc_cmd, callback, run_after = False):
        hook = Hook(mc_cmd, callback, run_after);
        if mc_cmd in self._hooks:
            if run_after:
                self._hooks[mc_cmd].after = hook
            else:
                self._hooks[mc_cmd].before = hook
        else:
            if run_after:
                self._hooks[mc_cmd] = HookKinds(None, hook)
            else:
                self._hooks[mc_cmd] = HookKinds(hook, None)

            self._hooks[mc_cmd] 

    def unreg(self, mc_cmd, run_after = False):
        if run_after:
            if self._hooks[mc_cmd].after is not None:
                self._hooks[mc_cmd].after = None
        else:
            if self._hooks[mc_cmd].before is not None:
                self._hooks[mc_cmd].before = None
        if (self._hooks[mc_cmd].before is None) and (self._hooks[mc_cmd].after is None):
            del self._hooks[mc_cmd]

hooks = HookMgr()
call = lambda x: x
hooks.reg('EditFile', call, True)
我有以下问题:

  • 利用Python代码是个好主意吗?在其他方面不会适得其反吗

  • 如何从C代码访问_hooksdict

  • 有更好的方法吗