2017-01-26 4 views
0

Aus irgendeinem Grund bekomme ich einen global name is not defined Fehler hier. Das Problem liegt in der addClient Methode, wo ich meine globale Variable joinID inkrementieren. Es wirft mir einen Fehler NameError: global name 'joinID' is not defined. Was mache ich falsch?`global` Name nicht definiert Fehler bei der Verwendung von Klassenvariablen

class Chatroom: 
    clients = [] 
    joinID = 0 

    def __init__(self,name,refNum): 
     self.refNum = refNum 
     self.name = name 

    def addClient(self,clientName): 
     global clients 
     global joinID 
     joinID = joinID+1 
     clients.append(clientName, joinID) 

    def removeClient(self, clientName, joinID): 
     global clients 
     clients.remove(clientName, joinID) 
+1

Ihre Einbuchtung gebrochen aussieht. Kennen Sie den Unterschied zwischen "x" und "self.x"? –

+0

Ganz einfach, JoinID ist nicht definiert. Nirgendwo ist eine joinID-Variable deklariert. – Octo

Antwort

2

nehmen die Variablen außerhalb der Klasse

joinID=0 
clients=[] 
class Chatroom: 
    def __init__(self,name,refNum): 
+0

oder verwenden Sie das 'self.'-Präfix, um die Variablen über die Instanz nachzuschlagen, oder' Chatroom.'-Präfix, um über die Klasse auf sie zuzugreifen. –

2

Bei einem Verfahren aus einer Klasse bether ist ein Attribut-Instanz zu verwenden oder eine Klasse atribute. In diesem Fall verwenden Sie ein Klassenattribut.

class Chatroom: 
    clients=[] 
    joinID=0 

    def __init__(self,name,refNum): 
     self.refNum=refNum 
     self.name=name 

    def addClient(self,clientName): 
     self.joinID=self.joinID+1 
     self.clients.append((clientName,self.joinID)) 

    def removeClient(self,clientName,joinID): 
     self.clients.remove((clientName,joinID)) 

Wenn Sie wan't global zu verwenden, müssen Sie die Variable im globalen Bereich erklären:

joinId=0 
clients=[] 
class Chatroom: 

    def __init__(self,name,refNum): 
     self.refNum=refNum 
     self.name=name 

    def addClient(self,clientName): 
     global joinID 
     global clients 
     joinID=joinID+1 
     clients.append((clientName,joinID)) 

    def removeClient(self,clientName,joinID): 
     global clients 
     clients.remove((clientName,joinID)) 
Verwandte Themen