为了避免在字典中指定标签和处理程序,您可以只使用处理程序类,其方法命名为与类型匹配。例如
class MyHandler(object):
def handle_extractTitle(self, dom):
# do something
def handle_extractMetaTags(self, dom):
# do something
def handle(self, type, dom):
func = getattr(self, 'handle_%s' % type, None)
if func is None:
raise Exception("No handler for type %r" % type)
return func(dom)
Usage:
handler = MyHandler()
handler.handle('extractTitle', dom)
Update:
当您有多个参数时,只需更改句柄函数以获取这些参数并将它们传递给函数即可。如果你想让它更通用(这样你就不必在更改参数签名时同时更改处理函数和句柄方法),可以使用 *args 和 **kwargs 语法来传递所有收到的参数。那么handle方法就变成了:
def handle(self, type, *args, **kwargs):
func = getattr(self, 'handle_%s' % type, None)
if func is None:
raise Exception("No handler for type %r" % type)
return func(*args, **kwargs)