Python 为什么要在“参考”中使用“自我”(参考?);变量";?

Python 为什么要在“参考”中使用“自我”(参考?);变量";?,python,self,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

我开始学习/编写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)
def handle_寄存器(self,name):
如果名称位于self.factory.users中:
self.sendLine(“已取名称,请选择其他名称”)
返回
self.sendLine(“欢迎,%s!”%(名称,))
self.broadcastMessage(“%s已加入频道。”%(名称,))
self.name=名称
self.factory.users[name]=self
self.state=“聊天”
def handle_聊天室(自我、信息):
message=“%s”%(self.name,message)
self.broadcastMessage(消息)
def广播消息(自我,消息):
对于名称,self.factory.users.iteritems()中的协议:
如果协议!=自我:
协议发送线(消息)

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

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

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

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

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

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

  • 确定聊天室中的名称是否已被使用
  • 向其他所有人发送消息(即防止向编写消息的用户发送消息副本)
  • 为了实现#2,他们迭代
    dict
    self.factory.users
    中的所有项。这些密钥是聊天室中的用户。值是聊天的实例


    协议!=self
    ,则代码已找到不属于当前用户的实例。

    好处是什么?好处是代码可以工作,我想:P如果不知道这个实例在哪里使用(以及如何使用),就不可能给出一个具体的答案。@MartijnPieters谢谢你提供的信息,我将收回我的votefirst,ty,因为答案是必须写的,self.factory.users[name]=self或它与if protocol相同self.factory.users[name]:是的,必须实际将
    self
    分配给该映射中的键<代码>如果协议!=如果
    name
    不在
    self.factory.users
    映射中,self.factory.users[name]可以很容易地抛出异常,先生!