我有两个不同的类
class ircChannel:
NAME = ""
def __init__(self):
self.NAME = NAME
class ircServer:
HOST = ""
PORT = 0
CHAN = []
def __init__(self, HOST, PORT):
self.HOST = HOST
self.PORT = PORT
def addChan(self, CHANEL):
self.CHAN.append(CHANEL)
我正在解析一个 XML 文件并创建一个包含 ircChannel 列表的 ircServer 列表
for server in servers
ircBot.addServer(ircServer(HOST, PORT))
for channel in channels
ircBot.SERVERS[-1].addChan(ircChannel(channel.name))
当我打印结果时,我一直重复
ircBot
Server 1 -
Channel1
Channel2
Channel3
Server 2 -
Channel1
Channel2
Channel3
但我只需要
ircBot
Server 1 -
Channel1
Channel2
Server 2 -
Channel3
当我明显创建两个不同的 irsServer 实例并添加不同的 channel 时,为什么两个列表保持相同的 channel ?
我尝试在 ircServer 类的 init 中清空列表,但它不起作用。
最佳答案
问题出在这里:
class ircServer:
HOST = ""
PORT = 0
CHAN = []
这些是整个类的成员,而不仅仅是它的一个对象(实例)。要修复它,请将其移至构造函数 (__init__
):
class ircServer:
def __init__(self, HOST, PORT):
self.HOST = HOST
self.PORT = PORT
self.CHAN = []
类成员就像范围内的全局变量。它们有一些实用性,但它们似乎对解决这个特定问题没有用。如果有任何情况,它可能是默认端口号:
class ircServer:
DEFAULT_PORT = 44100
def __init__(self, HOST, PORT = DEFAULT_PORT):
self.HOST = HOST
self.PORT = PORT
self.CHAN = []
关于当我更改其他对象列表时,Python 对象列表不断变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17390584/