1

Jythonインタープリターに手動で入力すると機能する単純な関数がありますが、コードを関数として実行しようとするとlen()の呼び出しが失敗します。

 def calculateChecksum(self, command):
      sum = 0
      for b in range(len(command)):
        sum = sum + command[b-1]
      mod =  sum % 64
      checkbyte = mod & (0xFF)
      checksum = checkbyte | 0x80

ここで、コマンドはバイトのjarray.arrayです(組み込みの配列型を使用しないのはなぜですか?質問します:重要ですか?jarray.arrayは他のすべてで機能し、場合によっては明らかに機能します。以下を参照してください)

>>> testarray
array([55, 57, 51], byte)
>>> len(testarray)
3
>>> stage.calculateChecksum(stage, testarray)
Traceback (innermost last):

  File "<console>", line 1, in ?

  File "....py", line 75, in calculateChecksum

AttributeError: __len__

したがって、この配列はlen()を実装していると言っても差し支えないと思いますが、なぜそれが常に正しいとは限らないのかわかりません。ここで何が起こっているのか分かりますか?

4

2 に答える 2

2

次のようなメソッドを呼び出します。

stage.calculateChecksum(testarray)

stageパラメータを明示的に渡す必要はないことに注意してください。これselfは、オブジェクト(stageこの場合)に対してメソッドを呼び出すときに暗黙的に渡されます。

于 2012-12-28T01:40:12.750 に答える
0

クラスに定義def calculateChecksum(self, command):し、class-methodを呼び出すときに、self変数を追加する必要はありません。Pythonがあなたに代わってそれを追加します。

于 2012-12-28T02:41:27.217 に答える