2

我似乎无法弄清楚这一点,而且,这让我发疯了。假设我有以下课程:

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'] = theMessage TypeError: 'instancemethod' 对象不支持项目分配

请问有什么想法吗?

4

3 回答 3

2

您正在connect通过具有相同名称的方法覆盖属性。重命名您的属性。

下一个问题是,如果你真的想要一个类属性或一个实例属性。如果您想要一个实例属性,请在__init__方法中定义它。

于 2013-10-18T09:22:11.403 回答
2

您已经定义了同名的方法和变量connect。所以你已经用你的方法覆盖了你的字典,更改其中一个的名称。

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

于 2013-10-18T09:22:21.623 回答
0

更正如下:

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()
于 2013-10-18T09:32:06.533 回答