gpt4 book ai didi

java - Jython 属性错误 : read-only attr

转载 作者:搜寻专家 更新时间:2023-10-31 20:21:57 25 4
gpt4 key购买 nike

我正在尝试编写一个关于 .py 扩展 java 接口(interface)的程序,就像 example on IBM developerworks .

但是我遇到了这样的问题:

AttributeError: read-only attr: cardID

但奇怪的是,如果我将 cardID 重命名为 cardNum,它会起作用。这是我的代码:

卡片信息.py

from com.jyt import CardInfo
class CardInfo(CardInfo):
def __init__(self):
self.cardName = "Dark Magician"
self.cardID = "888"

def getName(self):
return self.cardName

def getCardID(self):
return self.cardID

def setID(self,newID):
self.cardID = newID

和java接口(interface):

public interface CardInfo {
public String getCardID();
public String getName();
public void setID();
}

和java文件

        Object javaObject;
PythonInterpreter interpreter = new PythonInterpreter();
// PySystemState sys = Py.getSystemState();
interpreter.execfile("./res/CardInfo.py");
interpreter.exec("cardInfo=CardInfo()");
PyObject pyObject = interpreter.get("cardInfo");
pyObject.invoke("setID",new PyString("12345"));
try{
javaObject = pyObject.__tojava__(CardInfo.class);
CardInfo cardInfo = (CardInfo)javaObject;
System.out.println(cardInfo.getCardID());
System.out.println(cardInfo.getName());
}catch(Exception e){
e.printStackTrace();
}

有人知道怎么解决吗?

最佳答案

这只是一个猜测(现在无法测试,因为我不在我自己的电脑上),但你的问题可能与(未充分记录的)事实有关 jython generates property accessors for javas getter/setter methods ,这会与您的属性名称冲突,从而影响您的实际属性。

如果我的假设是正确的,那么本例中的问题是您有一个与属性同名(减去 get 部分)的 getter 方法。 Jython 看到该方法并为其生成一个属性,该属性是只读的,因为没有匹配的 setter 方法。

您可能可以通过将 setID 方法重命名为 setCardID 来解决此问题,这样 jython 就会正确地将属性解释为可写。如果由于某种原因这不起作用,那么以下方法之一肯定会起作用:

  • 将属性重命名为其他名称,例如 self.myCardID
  • 或者,将方法重命名为其他名称,例如 getID

这两种解决方案都应使属性不再被属性访问器隐藏。

关于java - Jython 属性错误 : read-only attr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12891021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com