要使用jython访问java中的python对象,必须创建java接口并使用coersion( PyObject.__java__() )将对象分配给java引用(http://www.jython.org/faq2.html)问题是我尝试使用的python库没有get和set,如果可以的话,我不想更改库代码。有没有一种方法可以获得这些公共变量,而不必实现python类来子类化和通过方法公开这些属性?谢谢。
PyObject.__java__()
6qftjkof1#
可以从 PyObject 直接使用 __getattr__(PyString) 以及 __setattr__(PyString, PyObject) 方法。可以通过以下方式获得属性:
PyObject
__getattr__(PyString)
__setattr__(PyString, PyObject)
PyObject pyObject = ...; // Get attribute: value = getattr(obj, name) // OR: value = obj.__getattr__(name) PyString attrName = Py.newString("some_attribute"); PyObject attrValue = pyObject.__getattr__(attrName);
警告:请务必使用 __getattr__(PyString) 因为 __getattr__(String) 只适用于内部字符串。也可以使用以下设置属性:
__getattr__(String)
PyObject pyObject = ...; // Set attribute: setattr(obj, name, value) // OR: obj.__setattr__(name, value) PyString attrName = Py.newString("some_attribute"); PyObject attrValue = (PyObject)Py.newString("A string as the new value."); pyObject.__setattr__(attrName, attrValue);
注意:该值不必是 PyString . 它必须是一个 PyObject .警告:请务必使用 __setattr__(PyString, PyObject) 因为 __setattr__(String, PyObject) 只适用于内部字符串。此外,还可以使用 __call__(PyObject[] args, String[] keywords) :
PyString
__setattr__(String, PyObject)
__call__(PyObject[] args, String[] keywords)
PyObject pyObject = ...; // Get method: method = getattr(obj, name) // OR: method = obj.__getattr__(name) PyString methodName = Py.newString("some_method"); PyObject pyMethod = pyObject.__getattr__(methodName); // Prepare arguments. // NOTE: args contains positional arguments followed by keyword argument values. PyObject[] args = new PyObject[] {arg1, arg2, ..., kwarg1, kwarg2, ...}; String[] keywords = new String[] {kwname1, kwname2, ...}; // Call method: result = method(arg1, arg2, ..., kwname1=kwarg1, kwname2=kwarg2, ...) PyObject pyResult = pyMethod.__call__(args, keywords);
注意:我无法解释为什么关键字名称是 String 在这里,按名称获取属性需要 PyString .
String
1条答案
按热度按时间6qftjkof1#
可以从
PyObject
直接使用__getattr__(PyString)
以及__setattr__(PyString, PyObject)
方法。可以通过以下方式获得属性:
警告:请务必使用
__getattr__(PyString)
因为__getattr__(String)
只适用于内部字符串。也可以使用以下设置属性:
注意:该值不必是
PyString
. 它必须是一个PyObject
.警告:请务必使用
__setattr__(PyString, PyObject)
因为__setattr__(String, PyObject)
只适用于内部字符串。此外,还可以使用
__call__(PyObject[] args, String[] keywords)
:注意:我无法解释为什么关键字名称是
String
在这里,按名称获取属性需要PyString
.