Есть ли способ создать экземпляр класса Python из Java с помощью Jython * без * расширения этого класса Python интерфейсом Java?

Все примеры в документации Jython здесь требуют, чтобы класс Python импортировать соответствующий интерфейс Java, например:

# A python module that implements a Java interface to
# create a building object
from org.jython.book.interfaces import BuildingType

class Building(BuildingType):
    def __init__(self, name, address, id):
        self.name = name
        self.address = address
        self.id = id
        ...

Я бы предпочел не связывать свой код Python с моим кодом Java. Есть ли способ создать экземпляр класса Python из Java, не изменяя его, чтобы он указывал на интерфейс Java?


person T.D. Smith    schedule 10.12.2014    source источник


Ответы (1)


Лучший ответ, который я смог придумать до сих пор, заключался в реализации Java-оболочек вокруг каждого класса Python, который я хочу создать. Каждая оболочка Java содержит объект PyObject, но обеспечивает статически типизированный доступ к его полям, например.

public class PeanutWrapper{
  private PyObject pyObj;

  public String getKind(){
    return pyObj.__findattr__("kind");
  }

  ...
}

Это работает, но это не такое элегантное решение, как я надеялся найти.

person T.D. Smith    schedule 12.12.2014