2

我浏览了 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__ 函数中:

  1. 运行 self.maxBW = maxBW 时调用 setMaxBW
  2. 此函数调用依次运行 self.maxBW = maxBW
  3. 此代码再次调用 setMaxBW
  4. 此函数调用依次运行 self.maxBW = maxBW
  5. 永远重复

由于这种无限递归,在达到最大递归深度后,我得到了一个 RuntimeError 。

一个想法是,这是漂亮的新型 Python 类正在做的事情(我的大部分 Python 时间都花在了老式类上),但是纯 Jython 不会出现这个问题(在 Eclipse 中或独立于命令行) 不继承自 Java 接口。我还没有尝试过 Eclipse 之外的接口继承。

现在我重申我最初的问题,但在我的代码上下文中:当 self.maxBW = maxBW 被执行时,一个继承了带有 setter 的 Java 接口的 Jython 类是否会自动调用 setMaxBW?

4

0 回答 0