Release av JPype 1.0, bibliotek för åtkomst av Java-klasser från Python

Tillgängliga lagersläpp JPype 1.0, som låter dig organisera full åtkomst av Python-applikationer till Java-klassbibliotek. Med JPype från Python kan du använda Java-specifika bibliotek för att skapa hybridapplikationer som kombinerar Java och Python-kod. Till skillnad från Jython uppnås integration med Java inte genom att skapa en Python-variant för JVM, utan genom interaktion på nivån för båda virtuella maskinerna som använder delat minne. Det föreslagna tillvägagångssättet tillåter inte bara att uppnå bra prestanda, utan ger också tillgång till alla CPython- och Java-bibliotek. Projektkod levererad av licensierad under Apache 2.0.

Huvudändringar:

  • JChar stöds som returtyp. För kompatibilitet ärver JChar från "str" ​​och implementerar en implicit konvertering till "int". Därför klarar den kontroller i kontrakt. Men detta betyder att den inte längre anses vara en numerisk typ i Python och därför utvärderas isinstance(c, int) till False, vilket är förenligt med Java-typkonverteringsregler.
  • En operatör har introducerats för att casta en Java-typ, Type@obj (@ är en Python-operator för inre produkt; Java har inte en).
  • Lade till notation för att skapa Java-matriser. Typ[s1][s2][s3] för matriser med fast storlek, Typ[:][:][:] för matriser som kommer att skapas senare.
  • @FunctionalInterface låter dig skapa Java-funktioner från Python-objekt med __call__.
  • Tog bort föråldrad JIterator, användning av JException som fabrik, get_default_jvm_path och jpype.reflect.
  • Som standard konverteras inte Java-strängar till Python-strängar.
  • Python har utfasat "__int__", så implicita kast mellan heltals- och flyttalstyper kommer att producera ett TypeError.
  • Användningen av JException har fasats ut. För att fånga alla undantag, eller kontrollera att ett objekt är en Java-undantagstyp, använd java.lang.Throwable.
  • Kaskadorsaker till Java-undantag återspeglas nu i Python-stackramar.
  • JString har fasats ut. För att skapa en Java-sträng, eller för att kontrollera att ett objekt är av typen Java-sträng, använd java.lang.String.
  • Repr-metoder har uppdaterats i Java-klasser.
  • java.util.List utför kontrakt för collections.abc.Sequence och collections.abc.MutableSequence.
  • java.util.Collection utför kontraktet för collections.abc.Collection.
  • Java-klasser är privata och kommer att kasta TypeError när de utökas från Python.
  • Hantera Control-C försiktigt. Tidigare versioner kraschar när Java bearbetar en Control-C-signal eftersom de kommer att avsluta Java under samtalet. JPype kommer nu att kasta ett InterruptedException när han återvänder från Java. Control-C kommer inte att kasta ut stora Java-procedurer som för närvarande implementerade, eftersom Java inte har något speciellt verktyg för detta.

Därefter skapades en korrigerande version 1.0.1, som lade till ändringar för att kringgå problem med Python 3.8.4-versionen. Python har ändrat logiken angående användningen av "__setattr__" för "objekt" och "typ", vilket förhindrar att den används för att modifiera härledda klasser. Felkontroll har också delegerats från metoden "__setattr__", så undantagstyperna i vissa lämplighetskontroller bör uppdateras därefter.

Källa: opennet.ru

Lägg en kommentar