Skip to main content
 首页 » 编程设计

python之模式之没有 else if 的事件调度程序

2025年05月04日13zengkefu

我正在为 Detours 库创建一个 Python 包装器。该工具的一部分是一个调度程序,用于将所有 Hook 的 API 调用发送到各种处理程序。

现在我的代码是这样的:

if event == 'CreateWindowExW': 
    # do something 
elif event == 'CreateProcessW': 
    # do something 
elif ... 

这感觉很糟糕。是否有一种模式可以创建事件调度程序而不必为每个 Windows API 函数创建 elif 分支?

请您参考如下方法:

一个很好的方法是定义一个类,该类具有等同于相关 API 函数名称的方法,以及一个分派(dispatch)到正确方法的分派(dispatch)方法。例如:

class ApiDispatcher(object): 
 
    def handle_CreateWindowExW(self): 
        # do whatever 
 
    def handle_CreateProcessW(self): 
        # do this one 
 
    def dispatch(self, event): 
        method = getattr(self, 'handle_%s' % event) 
        method()