2014-12-03 45 views
1

我想设置它,使属性“实例”是自动增量。我一直在寻找,但我也是新来的套接字编程,所以我可能一直在问错误的问题。最终目标是创建一个聊天室,可以识别谁在哪个组中。我一直在网上找到的所有教程都只能显示一个非常简单的套接字连接聊天室,而没有详细说明服务器应该如何区分不同的组。 我想我需要做到这一点的唯一的事情是让该变量而不是自动递增每个新用户加入每当有人新连接在我的扭曲套接字重置属性[python]

from twisted.internet.protocol import Factory, Protocol 
from twisted.internet import reactor 
import json 
class IphoneChat(Protocol): 
    memberList={} 
    Instance = 1 
    def connectionMade(self): 
     print "a client connected" 
     self.factory.clients.append(self) 
     print self.Instance 
     self.Instance+=1 
     self.factory.clients[-1].message("Connection Success") 
    def connectionLost(self, reason): 
     self.factory.clients.remove(self) 
    def dataReceived(self, data): 

     json_decoded = json.loads(data) 
     Type=json_decoded[0]["type"] 
     groupID=json_decoded[0]["groupID"] 
     member=json_decoded[0]["member"] 
     print Type 
     if Type=="node": 
      print "Node recc" 
     elif Type=="create": 
      print "group created" 
      self.memberList[groupID]=[] 
     elif Type=="con": 
      print "Connection" 
      self.memberList[groupID].append(member) 
     elif Type=="dis": 
      print "Disconnect" 
      self.memberList[grouID].remove(member) 
     elif Type=="poll": 
      print "Poll" 
     elif Type=="comment": 
      print "Comment" 
     else : 
      print "unrecognized type" 

     a = data.split(':') 
     print a 
     if len(a) > 1 : 
      command = a[0] 
      content = a[1] 
      msg = "" 
      if command == 'iam' : 
       self.name = content 
       msg = self.name + "has joined" 
      elif command == "msg" : 
       msg = self.name + ": " + content 
       print msg 
      for c in self.factory.clients: 
       c.message(msg) 
    def message(self, message): 
     self.transport.write(message +"\n") 

回答

2

这里的问题时进行复位的是,+ =递增的实例值而不是类本身(这意味着在您使用+=后,实例现在具有2的计数,但类级变量具有原始计数)。要解决这个问题,只需将类型(即类级字典)上的值与实例进行递增。这是一个最简单的例子,应该让事情更清楚。

class CountingClass(object): 
    count = 1 


>>> obj = CountingClass() 
>>> obj.count += 1 
>>> obj.count 
2 
>>> CountingClass.count 
1 
>>> CountingClass.count += 1 
>>> CountingClass.count 
2 
>>> type(obj).count += 1 
>>> CountingClass.count 
3 

您应该使用type(obj)如果你想子类有不同的计数(因为他们将各自有自己的数据__dict__),否则你应该明确地使用实际的类名。

+0

我还有一点想弄明白,但我给你最好的答案,让我看看我在概念上出错的地方,我想我可以从这里算出来,谢谢一堆! – DanHabib 2014-12-03 04:48:07