我有两个不同的班级
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文件并创建一个包含ircServer列表的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实例并添加了不同的通道,为什么这两个列表一直有相同的通道?你知道吗
我尝试清空ircServer类的init中的列表,但它不起作用。你知道吗
丢失类属性。反正你也不用。事实上,它导致了您的bug,因为所有实例似乎共享相同的
CHAN
列表同时考虑阅读PEP8并至少遵循其中的大部分指导原则
修改
否则
CHAN
是类属性,对于所有类实例都是相同的。在__init__
中执行self.CHAN = []
将使CHAN
成为实例属性。你知道吗问题在于:
它们是整个类的成员,而不仅仅是它的单个对象(实例)。要修复它,请将其移动到构造函数(
__init__
):类成员类似于作用域全局变量。它们有一定的实用性,但似乎对解决这个特殊问题没有帮助。如果有任何情况,它可能是一个默认端口号:
相关问题 更多 >
编程相关推荐