Liberigo de JPype 1.0, bibliotekoj por aliri Java klasojn de Python

Disponebla tavolo liberigo JPype 1.0, kiu permesas al Python-aplikoj havi plenan aliron al klasbibliotekoj en la Java lingvo. Kun JPype de Python, vi povas uzi Java-specifajn bibliotekojn por krei hibridajn aplikaĵojn, kiuj kombinas Java kaj Python-kodon. Male al Jython, integriĝo kun Java estas atingita ne per kreado de Python-variaĵo por la JVM, sed per interagado sur la nivelo de ambaŭ virtualaj maŝinoj uzante komunan memoron. La proponita aliro permesas ne nur atingi bonan rendimenton, sed ankaŭ disponigas aliron al ĉiuj CPython kaj Java bibliotekoj. Projekta kodo distribuita de licencita sub Apache 2.0.

Ĉefaj ŝanĝoj:

  • JChar estas subtenata kiel revena tipo. Por kongruo, JChar heredas de "str" ​​​​kaj efektivigas implican konvertiĝon al "int". Tial ĝi pasas ĉekojn en kontraktoj. Sed tio signifas, ke ĝi ne plu estas konsiderata nombra tipo en Python kaj tial isinstance(c, int) taksas False, kio kongruas kun Java-tipkonvertaj reguloj.
  • Operatoro estis prezentita por gisi Java tipon, Type@obj (@ estas Python operatoro por interna produkto; Java ne havas tian).
  • Aldonita notacio por krei Java-tabelojn. Tajpu[s1][s2][s3] por fiksgrandaj tabeloj, Tajpu[:][:][:] por tabeloj kiuj estos kreitaj poste.
  • @FunctionalInterface permesas krei Java-funktorojn el Python-objektoj per __call__.
  • Forigita malrekomendita JIterator, uzo de JException kiel fabriko, get_default_jvm_path kaj jpype.reflect.
  • Defaŭlte, Java-ĉenoj ne estas konvertitaj al Python-ĉenoj.
  • Python malrekomendis "__int__", do implicitaj rolantaroj inter entjeraj kaj glitkomaj tipoj produktos TypeError.
  • La uzo de JException estas malrekomendita. Por kapti ĉiujn esceptojn, aŭ kontroli, ke objekto estas Ĝava esceptospeco, uzu java.lang.Throwable.
  • Kaskadaj kaŭzoj de Java-esceptoj nun estas reflektitaj en Python-stakaj kadroj.
  • JString estis malrekomendita. Por krei Java-ĉenon, aŭ por kontroli, ke objekto estas de tipo Java-ĉeno, uzu java.lang.String.
  • Repr-metodoj estis ĝisdatigitaj en Java klasoj.
  • java.util.List efektivigas kontraktojn por collections.abc.Sequence kaj collections.abc.MutableSequence.
  • java.util.Collection efektivigas la kontrakton por collections.abc.Collection.
  • Java klasoj estas privataj kaj ĵetos TypeError kiam etenditaj de Python.
  • Pritraktu Kontrolon-C zorge. Antaŭaj versioj kraŝas kiam Java prilaboras Control-C-signalon ĉar ili finos Java dum la voko. JPype nun ĵetos InterruptedException kiam revenos de Java. Kontrolo-C ne forĵetos grandajn Java-procedurojn kiel nuntempe efektivigite, ĉar Java ne havas specialan ilon por tio.

Poste, korekta eldono 1.0.1 estis kreita, kiu aldonis ŝanĝojn por trakti problemojn kun la eldono de Python 3.8.4. Python ŝanĝis la logikon koncerne la uzon de "__setattr__" por "objekto" kaj "tipo", malhelpante ĝin esti uzata por modifi derivitajn klasojn. Erarkontrolado ankaŭ estis delegita de la "__setattr__" metodo, do la esceptspecoj en kelkaj taŭgecaj kontroloj devus esti ĝisdatigitaj laŭe.

fonto: opennet.ru

Aldoni komenton