【问题标题】:List of strings in a dictionary getting erroneously assigned a value [duplicate]字典中的字符串列表被错误地分配了一个值[重复]
【发布时间】:2014-04-26 17:20:35
【问题描述】:

我正在编写的程序中遇到了一个非常奇怪的问题。我正在尝试在字典中查找对象,如果对象中的名称字符串与我要查找的名称匹配,那么我将一条消息附加到空列表中。之后,我希望有一个单个字符串的列表。我实际上得到的结果让我感到非常惊讶,我无法解释它的一生。

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"]

【问题讨论】:

  • 你有一些完全错误的空白格式,修复它,你可能会改善你的反应。

标签: python string dictionary append


【解决方案1】:

您的问题是您的mymessage 是一个类属性,因此它在该类的所有实例之间共享。通过在 __init__ 方法中分配它使其成为实例属性。既然这样,为什么不把全名也传进去呢?

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

【讨论】:

  • 已修复!!非常感谢!
猜你喜欢
  • 2017-01-11
  • 2021-06-22
  • 2018-06-19
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 2019-08-19
  • 2018-10-24
  • 1970-01-01
相关资源
最近更新 更多