Python `全局`未定义名称使用类变量时出错

Python `全局`未定义名称使用类变量时出错,python,class,global,Python,Class,Global,由于某种原因,我得到一个全局名称未定义的错误。问题在于addClient方法,在该方法中,我将递增全局变量joinID。它向我抛出一个错误NameError:未定义全局名称“joinID”。我做错了什么 class Chatroom: clients = [] joinID = 0 def __init__(self,name,refNum): self.refNum = refNum self.name = name def

由于某种原因,我得到一个
全局名称未定义的错误。问题在于
addClient
方法,在该方法中,我将递增全局变量
joinID
。它向我抛出一个错误
NameError:未定义全局名称“joinID”
。我做错了什么

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)

将变量带到类外

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

将变量带到类外

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

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

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

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

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

你的压痕看起来破了。另外,您知道“x”和“self.x”之间的区别吗?很简单,joinID没有定义。没有声明joinID变量。缩进看起来已损坏。另外,您知道“x”和“self.x”之间的区别吗?很简单,joinID没有定义。没有声明joinID变量。或者使用
self.
前缀通过实例查找变量,或者使用
Chatroom.
前缀通过类访问变量。或者使用
self.
前缀通过实例查找变量,或者使用
Chatroom.
前缀通过类访问变量。