Llançament de JPype 1.0, biblioteques per accedir a classes Java des de Python

Disponible alliberament de la capa JPype 1.0, que us permet organitzar l'accés complet de les aplicacions Python a les biblioteques de classes Java. Amb JPype de Python, podeu utilitzar biblioteques específiques de Java per crear aplicacions híbrides que combinen codi Java i Python. A diferència de Jython, la integració amb Java no s'aconsegueix mitjançant la creació d'una variant de Python per a la JVM, sinó mitjançant la interacció a nivell d'ambdues màquines virtuals utilitzant memòria compartida. L'enfocament proposat permet no només aconseguir un bon rendiment, sinó que també proporciona accés a totes les biblioteques CPython i Java. Codi del projecte Distribuït per amb llicència d'Apache 2.0.

Principals canvis:

  • JChar és compatible com a tipus de retorn. Per a la compatibilitat, JChar hereta de "str" ​​​​i implementa una conversió implícita a "int". Per tant, passa controls en els contractes. Però això vol dir que ja no es considera un tipus numèric a Python i, per tant, isinstance(c, int) s'avalua com a False, que és coherent amb les regles de conversió de tipus Java.
  • S'ha introduït un operador per emetre un tipus Java, Type@obj (@ és un operador Python per al producte intern; Java no en té cap).
  • S'ha afegit una notació per crear matrius Java. Escriviu [s1][s2][s3] per a matrius de mida fixa, Tipus[:][:][:] per a matrius que es crearan més tard.
  • @FunctionalInterface us permet crear functors Java a partir d'objectes Python amb __call__.
  • S'ha eliminat el JIterator obsolet, l'ús de JException com a fàbrica, get_default_jvm_path i jpype.reflect.
  • Per defecte, les cadenes de Java no es converteixen en cadenes de Python.
  • Python ha obsolet "__int__", de manera que les distribucions implícites entre els tipus enter i de coma flotant produiran un TypeError.
  • L'ús de JException ha quedat obsolet. Per detectar totes les excepcions o comprovar que un objecte és un tipus d'excepció Java, utilitzeu java.lang.Throwable.
  • Les causes en cascada de les excepcions de Java ara es reflecteixen als marcs de pila de Python.
  • JString ha quedat obsolet. Per crear una cadena Java, o per comprovar que un objecte és del tipus cadena Java, utilitzeu java.lang.String.
  • Els mètodes Repr s'han actualitzat a les classes Java.
  • java.util.List executa contractes per a collections.abc.Sequence i collections.abc.MutableSequence.
  • java.util.Collection executa el contracte de collections.abc.Collection.
  • Les classes Java són privades i llançaran TypeError quan s'estenen des de Python.
  • Manegeu el Control-C amb cura. Les versions anteriors es bloquegen quan Java processa un senyal Control-C perquè finalitzaran Java durant la trucada. JPype ara llançarà una InterruptedException quan torni de Java. Control-C no llançarà grans procediments de Java tal com s'implementa actualment, ja que Java no té una eina especial per a això.

A continuació, es va crear una versió correctiva 1.0.1, que va afegir canvis per solucionar problemes amb la versió 3.8.4 de Python. Python ha canviat la lògica pel que fa a l'ús de "__setattr__" per a "objecte" i "tipus", evitant que s'utilitzi per modificar classes derivades. La comprovació d'errors també s'ha delegat des del mètode "__setattr__", de manera que els tipus d'excepció en algunes comprovacions d'adequació s'han d'actualitzar en conseqüència.

Font: opennet.ru

Afegeix comentari