我正在写一个程序中有一个非常奇怪的问题。我正在尝试在字典中找到一个对象,如果对象中的名称字符串与我正在寻找的名称匹配,那么我会在空列表中附加一条消息。之后,我希望有一个单个字符串的列表。我实际上得到的东西对我来说是相当惊讶的,我不能为我的生活解释它。
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"]
答案 0 :(得分:2)
您的问题是您的mymessage
是一个类属性,因此它在类的所有实例之间共享。通过在__init__
方法中指定实例属性,使其成为实例属性。你在做什么时,为什么不传全名呢?
class Client:
def __init__(self, fullname):
self.my_fullname = fullname
self.mymessage = []