附加列表附加的值比预期的多

问题描述 投票:0回答:1

我尝试做一个函数,它接受一个消息列表和一个作者列表,并将每条消息放入其对应的作者的消息列表中。

class Author:
    name = ""
    msgs = []
    files = []

class Message:
    line = ""
    time = datetime
    author = ""

提到的功能

for au in authorList:
    a = 0
    for msg in msgList:
        if au.name == msg.author:
            a += 1
            au.msgs.append(msg)
    print(a)

for au in authorList:
    print(len(au.msgs))

和程序的输出

a=396
a=349
745
745

该函数接受au.name和msg.author并对它们进行比较,如果它们相等,则msg存储在au.msgs列表中。每次向用户添加消息时,变量a都会递增,并且可以看出,对于第一个用户a = 396和第二个用户a = 349,其总和745,即msgList的大小。

问题是每个author.msgList结束保存消息总量。

我必须提到我在python中技能不高,所以它可能是一个简单的noob问题。

python
1个回答
3
投票

这是因为msgsfiles是类变量,而不是实例变量,因此它们由Author的所有实例共享。

您可以将它们定义为实例变量,如下所示:

class Author:
  def __init__(self):
    self.name = ''
    self.msgs = []
    self.files = []

正如TheGamer007所建议的那样,考虑一下https://www.geeksforgeeks.org/g-fact-34-class-or-static-variables-in-python/

© www.soinside.com 2019 - 2024. All rights reserved.