Python访问字典和更改值-错误

Python访问字典和更改值-错误,python,dictionary,Python,Dictionary,我似乎无法理解这一点,而且,这是我的疯狂潜水。让我们假设我有以下类: class Test: connect = {'Message': None} def connect(self): if not self.connect['Message']: print "Message is not set" else: print "Message is active and set!" def connectMSG(self, theMessage):

我似乎无法理解这一点,而且,这是我的疯狂潜水。让我们假设我有以下类:

class Test:

 connect = {'Message': None}

 def connect(self):
  if not self.connect['Message']:
     print "Message is not set"
  else:
     print "Message is active and set!"

 def connectMSG(self, theMessage):
     self.connect['Message'] = theMessage
下面看起来不错。我似乎无法直观地看到错误,但我得到以下信息:

self.connect['Message']=消息 TypeError:“instancemethod”对象不支持项分配


有什么想法吗?

您正在用相同名称的方法覆盖属性
connect
。重命名属性


下一个问题是,如果您真的想拥有class属性或instance属性。如果需要实例属性,请在
\uuu init\uuu
方法中对其进行定义。

您将使用相同名称的方法覆盖属性
connect
。重命名属性


下一个问题是,如果您真的想拥有class属性或instance属性。如果需要实例属性,请在
\uuu init\uuu
方法中定义它。

您已定义了一个方法和一个同名的变量
connect
。因此,如果已使用方法覆盖词典,请更改其中一个的名称


所以发生的事情是,首先创建名为connect的字典,然后用方法覆盖它。当您试图访问字典时,您得到的是一个错误,告诉您
connect
方法不支持该操作(它不是dict)

您已经定义了一个方法和一个同名的变量
connect
。因此,如果已使用方法覆盖词典,请更改其中一个的名称


所以发生的事情是,首先创建名为connect的字典,然后用方法覆盖它。当您尝试访问字典时,得到的是一个错误,告诉您
connect
方法不支持该操作(它不是dict)

更正为:

class Connection:
   def __init__(self):
       self.connect = {'Message': None}              #moved here

   def Check(self):                                  #renamed
       if not self.connect['Message']:
           print "Message is not set."
       else:
           print "Message is active and set!"

   def Connect(self, theMessage):                    #renamed
       self.connect['Message'] = theMessage

cnt = Connection()

更正为:

class Connection:
   def __init__(self):
       self.connect = {'Message': None}              #moved here

   def Check(self):                                  #renamed
       if not self.connect['Message']:
           print "Message is not set."
       else:
           print "Message is active and set!"

   def Connect(self, theMessage):                    #renamed
       self.connect['Message'] = theMessage

cnt = Connection()

天哪,我有时候真是太蠢了!!!!非常感谢你啊哈,现在真的很早了,我想我需要回去睡觉了=)天哪,我有时候真是太傻了!!!!非常感谢你啊哈,现在真的很早了,我想我需要回去睡觉了=)这是修复代码可以做的众多更正之一。但是,您的代码不是pythonic,PEP8指定方法名称应为小写,并根据需要使用下划线分隔单词,以提高可读性,如果您将代码更改为遵循PEP8,您将面临相同的问题。这是修复代码所能做的众多更正之一。但是,您的代码不是pythonic的,PEP8指定方法名称应为小写,并根据需要使用下划线分隔单词,以提高可读性,如果您将代码更改为遵循PEP8,则将面临相同的问题。