我使用的是Jython 2.5(但必要时可以更改为2.7)。 除此之外,我的jython代码操纵导入的jar库的java类的实例。
说java库代码是
public class A extends B implements C
{
public A(int a)
{
this.var1 = a;
}
public getVar1()
{
return this.var1;
}
public setVar1(a)
{
this.var1 = a;
}
}
在我的Jython脚本中,我可以访问A类的实例(对象)并且可以执行
var1 = myinstance.getVar1()
以获取属性var1
。
我的问题如下:我想在运行时向ClassA的所有实例添加另一个属性,即'var2'字段。
这应该存在于ClassA的所有实例上,但对于每个类的实例都有不同的实际值(绑定到对象,而不是类)。
如果成功,我还想动态地为这些对象添加getVar2()
方法,以获取self.var2
中为每个对象存储的内容。
问题是:据我所知,如果ClassA是python,这本来是可能的。但是因为它是一个java类,所以jython不允许这样做[即使设置python.security.respectJavaAccessibility = false
]
我在一本jython书中发现的一个想法如下:
添加属性:您无法在Java实例中添加属性 运行时带有赋值语句。要获得这种能力,你可以 创建Java对象的Jython子类。然后你就可以了 将属性添加到子类的实例。
因此,应该可以使用具有附加属性的python类包装java类和现有对象,并在我的代码中稍后使用这些新对象。
但是我不确定如何做到这一点或是否有替代方案。
思想?