使用类变量时,`global` name未定义错误

时间:2017-01-26 19:07:14

标签: python class global

出于某种原因,我在这里收到global name is not defined错误。问题出在addClient方法中,我将增加全局变量joinID。它给我一个错误NameError: global name 'joinID' is not defined。我做错了什么?

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)

2 个答案:

答案 0 :(得分:4)

在类的方法中,使用实例属性或类属性。在这种情况下,您使用的是类属性。

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))

如果您不想使用global,则必须在全局范围内声明变量:

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))

答案 1 :(得分:1)

取出类外的变量

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