我浏览了 Jython.org 上的 Jython 书,并仔细阅读了 Internet 以获得一些答案,但我没有看到任何暗示以下(在我看来很奇怪)行为的地方。我正在使用带有 Jython 2.5.3 的 Eclipse 3.6.1 中的 PyDev 1.5.7 来执行此操作。
执行 self.val = val 时,从带有 setter 的 Java 接口继承的 Jython 类是否会自动调用 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__ 函数中:
- 运行 self.maxBW = maxBW 时调用 setMaxBW
- 此函数调用依次运行 self.maxBW = maxBW
- 此代码再次调用 setMaxBW
- 此函数调用依次运行 self.maxBW = maxBW
- 永远重复
由于这种无限递归,在达到最大递归深度后,我得到了一个 RuntimeError 。
一个想法是,这是漂亮的新型 Python 类正在做的事情(我的大部分 Python 时间都花在了老式类上),但是纯 Jython 不会出现这个问题(在 Eclipse 中或独立于命令行) 不继承自 Java 接口。我还没有尝试过 Eclipse 之外的接口继承。
现在我重申我最初的问题,但在我的代码上下文中:当 self.maxBW = maxBW 被执行时,一个继承了带有 setter 的 Java 接口的 Jython 类是否会自动调用 setMaxBW?