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

时间:2019-03-29 09:33:58

标签: python

我试图做一个函数,它接收消息列表和作者列表,并将每条消息放入相应作者的消息列表中。

def make_call_from_phone(self,extension):

    self.window.find_element_by_id("DialPad").click()  ##Clicks on dialpad
    self.driver.implicitly_wait(5)
    time.sleep(10)
    self.window.find_element_by_id("DialPadTextBox").send_keys(extension) 
    ##Enters extension
    time.sleep(10)
    self.window.find_element_by_id("DialPadButton").click() ##Clicks on call 
    button

提到的功能

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

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

问题在于,每个author.msgList结束时都保留了全部消息。

我不得不提到我对python的了解不高,所以这可能是一个简单的noob问题。

1 个答案:

答案 0 :(得分: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/