2

私は Jython.org の Jython book に目を通し、いくつかの回答を求めてインターネットを熟読しましたが、次のような (私には奇妙に思われる) 動作を示唆する場所はどこにもありません。私はJython 2.5.3を搭載したEclipse 3.6.1でPyDev 1.5.7を使用してこれを行っています。

セッターを使用してJavaインターフェースから継承するJythonクラスは、self.val = valが実行されたときにsetValを自動的に呼び出しますか?

Java インターフェイスは次のとおりです。

package com.me.mypackage
import org.python.core.PyDictionary;

public interface MyInterface {

    public double getMaxBW();

    public boolean setMaxBW(double bw);

}

Jython クラスは次のとおりです。

from com.me.mypackage import MyInterface

class MyClass(MyInterface):

  def __init__(self, maxBW):
    self.maxBW = maxBW

  def setMaxBW(self, maxBW):
    self.maxBW = maxBW

  def getMaxBW(self):
    return self.maxBW

__init__ 関数でクラスをインスタンス化すると、次のようになります。

  1. setMaxBW は、self.maxBW = maxBW の実行時に呼び出されます
  2. この関数呼び出しは、次に self.maxBW = maxBW を実行します
  3. このコードは再び setMaxBW を呼び出します
  4. この関数呼び出しは、次に self.maxBW = maxBW を実行します
  5. 永遠に繰り返す

この無限再帰の結果、最大再帰深度に達した後に RuntimeError が発生します。

これは気の利いた新しいスタイルの Python クラスが行っていたことだと考えられていましたが (私はほとんどの Python 時間を古いスタイルのクラスに費やしてきました)、純粋な Jython (Eclipse またはコマンド ラインからのスタンドアロン) ではこの問題は発生しません。 ) Java インターフェイスから継承されません。Eclipse 以外でインターフェイスの継承を試したことはありません。

そして今、最初の質問を繰り返しますが、コードのコンテキストで: セッターを持つ Java インターフェースを継承する Jython クラスは、self.maxBW = maxBW が実行されると setMaxBW を自動的に呼び出しますか?

4

0 に答える 0