为什么在"变量"?中使用self(引用?)?

时间:2014-07-30 15:26:54

标签: python self

我开始学习/编写Twisted网络编程,我遇到了以下代码:

def handle_REGISTER(self, name):
     if name in self.factory.users:
        self.sendLine("Name taken, please choose another.")
        return
     self.sendLine("Welcome, %s!" % (name,))
     self.broadcastMessage("%s has joined the channel." % (name,))
     self.name = name
     self.factory.users[name] = self
     self.state = "CHAT"

def handle_CHAT(self, message):
     message = "<%s> %s" % (self.name, message)
     self.broadcastMessage(message)

def broadcastMessage(self, message):
     for name, protocol in self.factory.users.iteritems():
        if protocol != self:
           protocol.sendLine(message)

self.x[y]=self的好处是什么?

2 个答案:

答案 0 :(得分:1)

self.factory.users共享映射;该类的每个实例都可以访问它。如果您愿意,它是连接实例的中央注册表。连接本身负责注册

通过在self.factory.users中存储对所有每用户实例的引用,您可以使用broadcastMessage方法向所有用户发送消息:

for name, protocol in self.factory.users.iteritems():
    if protocol != self:
        protocol.sendLine(message)

这将遍历所有已注册的实例,并在每个其他连接上调用sendLine()

答案 1 :(得分:0)

代码以两种方式使用自引用:

  1. 确定聊天室中的名字是否已被占用
  2. 向其他人发送消息(即阻止将消息副本发送给编写该消息的用户)。
  3. 要实现#2,他们会迭代dict self.factory.users中的所有项目。密钥是聊天室中的用户。值是聊天的实例。

    protocol != self时,代码找到了一个不属于当前用户的实例。