'METHODNAME' as Client method versus irc_'METHODNAME' in twisted
看看twisted.words.protocols.irc.ircclient,在我看来有一些奇怪的冗余方法。例如,有一个方法"privmsg",但也有一个方法"irc_privmsg"
另一个例子是考虑"join"和"irc_join"
我想知道的是为什么冗余,这只是许多例子中的两个。这两种不同的类型在不同的上下文中使用吗?我们应该使用一种类型而不是另一种类型吗?
对于在不同环境中使用的两种不同类型的方法,您的看法是正确的。通过检查
1 2 3 4 5 6 7 8 9 10 11 12 | def handleCommand(self, command, prefix, params): """Determine the function to call for the given command and call it with the given arguments. """ method = getattr(self,"irc_%s" % command, None) try: if method is not None: method(prefix, params) else: self.irc_unknown(prefix, command, params) except: log.deferr() |
这是一个模式的例子,在扭曲的协议实现中非常常见,甚至更普遍地说,在整个Python程序中也是如此。输入的某些部分用于动态构造方法名。然后用
由于服务器正在发送"privmsg…"和"join…"等客户机行,这导致
调用这些
1 2 3 4 5 6 7 8 9 10 | def irc_JOIN(self, prefix, params): """ Called when a user joins a channel. """ nick = string.split(prefix,'!')[0] channel = params[-1] if nick == self.nickname: self.joined(channel) else: self.userJoined(nick, channel) |
你可以看到这里也有一个条件,有时它称为
这个层次应该帮助您决定在处理事件时要覆盖哪些方法。如果最高级别的回调,如
您还将发现有一些IRC消息,
如果您愿意的话,您可以按照