我正在编写的程序中遇到一个非常奇怪的问题。我正在尝试在字典中找到对象,并且如果对象中的名称字符串与我要查找的名称匹配,那么我会在空列表中附加一条消息。之后,我希望有一个单个字符串的列表。尽管我实际上得到的是令我感到惊讶的东西,但我无法一生对其进行解释。
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"]
您的问题是您mymessage
是一个类属性,因此它在该类的所有实例之间共享。通过在__init__
方法中进行分配,使其成为实例属性。当您使用它时,为什么不还要输入全名呢?
class Client:
def __init__(self, fullname):
self.my_fullname = fullname
self.mymessage = []
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句