私は 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__ 関数でクラスをインスタンス化すると、次のようになります。
- setMaxBW は、self.maxBW = maxBW の実行時に呼び出されます
- この関数呼び出しは、次に self.maxBW = maxBW を実行します
- このコードは再び setMaxBW を呼び出します
- この関数呼び出しは、次に self.maxBW = maxBW を実行します
- 永遠に繰り返す
この無限再帰の結果、最大再帰深度に達した後に RuntimeError が発生します。
これは気の利いた新しいスタイルの Python クラスが行っていたことだと考えられていましたが (私はほとんどの Python 時間を古いスタイルのクラスに費やしてきました)、純粋な Jython (Eclipse またはコマンド ラインからのスタンドアロン) ではこの問題は発生しません。 ) Java インターフェイスから継承されません。Eclipse 以外でインターフェイスの継承を試したことはありません。
そして今、最初の質問を繰り返しますが、コードのコンテキストで: セッターを持つ Java インターフェースを継承する Jython クラスは、self.maxBW = maxBW が実行されると setMaxBW を自動的に呼び出しますか?