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。メソッドで辞書を上書きしたので、そのうちの 1 つの名前を変更します。

つまり、最初に 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 に答える