错误地为字典分配值的字典中的字符串列表

时间:2014-03-20 03:59:38

标签: python string dictionary append

我正在写一个程序中有一个非常奇怪的问题。我正在尝试在字典中找到一个对象,如果对象中的名称字符串与我正在寻找的名称匹配,那么我会在空列表中附加一条消息。之后,我希望有一个单个字符串的列表。我实际上得到的东西对我来说是相当惊讶的,我不能为我的生活解释它。

clients     = {}    

class Client:           
my_fullname = ""
mymessage       = []

def send_message(recipient, message, clients):
for guy in clients:
    if clients[guy].my_fullname == recipient:
        print(clients[guy].my_fullname)
        print(clients[guy].mymessage)
        clients[guy].mymessage.append(message)
        return

SCOTT = Client()
SCOTT.my_fullname = "SCOTT"
KAT = Client()
KAT.my_fullname = "KAT"

clients["SCOTT"] = SCOTT
clients["KAT"] = KAT

print(clients["KAT"].mymessage)
send_message("KAT", "goodbye", clients)
print(clients["KAT"].mymessage)

print(clients["SCOTT"].mymessage)
send_message("SCOTT", "what's up", clients)
print(clients["SCOTT"].mymessage)

这是我从运行中获得的输出。我在使用Python 2.7.5。我已经尝试过将客户作为参数传递给我,我已经尝试将其作为一个全局而不传递它,并且我已经尝试将其作为一个全局而不是传递它但是在开始时声明“全球客户”函数和我得到相同的结果无论如何。请帮忙吗?

[]
KAT
[]
['goodbye']
['goodbye']
SCOTT
['goodbye']
['goodbye', "what's up"]

1 个答案:

答案 0 :(得分:2)

您的问题是您的mymessage是一个类属性,因此它在类的所有实例之间共享。通过在__init__方法中指定实例属性,使其成为实例属性。你在做什么时,为什么不传全名呢?

class Client:           
    def __init__(self, fullname):
        self.my_fullname = fullname
        self.mymessage   = []