Skip to main content
 首页 » 编程设计

python之`global` 使用类变量时名称未定义错误

2025年05月04日24artech

出于某种原因,我在此处收到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) 

请您参考如下方法:

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

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

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

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