Paglabas ng JPype 1.0, mga aklatan para sa pag-access ng mga klase ng Java mula sa Python

Magagamit pagpapalabas ng layer JPype 1.0, na nagpapahintulot sa mga application ng Python na magkaroon ng ganap na access sa mga library ng klase sa wikang Java. Sa JPype mula sa Python, maaari mong gamitin ang mga library na partikular sa Java upang lumikha ng mga hybrid na application na pinagsasama ang Java at Python code. Hindi tulad ng Jython, ang pagsasama sa Java ay nakakamit hindi sa pamamagitan ng paglikha ng variant ng Python para sa JVM, ngunit sa pamamagitan ng pakikipag-ugnayan sa antas ng parehong virtual machine gamit ang shared memory. Ang iminungkahing diskarte ay nagbibigay-daan hindi lamang upang makamit ang mahusay na pagganap, ngunit nagbibigay din ng access sa lahat ng CPython at Java library. Code ng proyekto ipinamahagi ni lisensyado sa ilalim ng Apache 2.0.

Pangunahing pagbabago:

  • Ang JChar ay sinusuportahan bilang isang uri ng pagbabalik. Para sa compatibility, nagmana ang JChar mula sa "str" ​​​​at nagpapatupad ng isang implicit na conversion sa "int". Samakatuwid, nagpapasa ito ng mga tseke sa mga kontrata. Ngunit nangangahulugan ito na hindi na ito itinuturing na isang numeric na uri sa Python at samakatuwid ang isinstance(c, int) ay nagsusuri sa False, na naaayon sa mga panuntunan sa conversion ng uri ng Java.
  • Ang isang operator ay ipinakilala upang mag-cast ng isang uri ng Java, Type@obj (@ ay isang Python operator para sa panloob na produkto; Java ay walang isa).
  • Nagdagdag ng notasyon para sa paglikha ng mga array ng Java. I-type ang[s1][s2][s3] para sa mga nakapirming laki ng array, Type[:][:][:] para sa mga array na gagawin mamaya.
  • Binibigyang-daan ka ng @FunctionalInterface na lumikha ng mga function ng Java mula sa mga bagay na Python na may __call__.
  • Inalis ang hindi na ginagamit na JIterator, paggamit ng JException bilang factory, get_default_jvm_path at jpype.reflect.
  • Bilang default, ang mga string ng Java ay hindi na-convert sa mga string ng Python.
  • Hindi na ginagamit ng Python ang "__int__", kaya ang mga implicit na cast sa pagitan ng mga uri ng integer at floating-point ay gagawa ng TypeError.
  • Ang paggamit ng JException ay hindi na ginagamit. Upang makuha ang lahat ng mga exception, o tingnan kung ang isang object ay isang uri ng Java exception, gamitin ang java.lang.Throwable.
  • Ang mga cascading na sanhi ng mga exception sa Java ay makikita na ngayon sa mga stack frame ng Python.
  • Hindi na ginagamit ang JString. Upang gumawa ng Java string, o upang suriin kung ang isang object ay may uri ng Java string, gamitin ang java.lang.String.
  • Ang mga pamamaraan ng Repr ay na-update sa mga klase ng Java.
  • Ang java.util.List ay nagpapatupad ng mga kontrata para sa collections.abc.Sequence at collections.abc.MutableSequence.
  • Isinasagawa ng java.util.Collection ang kontrata para sa collections.abc.Collection.
  • Ang mga klase ng Java ay pribado at itatapon ang TypeError kapag pinalawig mula sa Python.
  • Maingat na hawakan ang Control-C. Nag-crash ang mga nakaraang bersyon kapag nagpoproseso ang Java ng isang Control-C signal dahil wawakasan ng mga ito ang Java habang tumatawag. Maghahagis na ngayon ng InterruptedException ang JPype kapag bumalik mula sa Java. Hindi itatapon ng Control-C ang malalaking pamamaraan ng Java gaya ng kasalukuyang ipinapatupad, dahil walang espesyal na tool ang Java para dito.

Susunod, isang corrective release 1.0.1 ang ginawa, na nagdagdag ng mga pagbabago upang malutas ang mga problema sa Python 3.8.4 release. Binago ng Python ang lohika tungkol sa paggamit ng "__setattr__" para sa "object" at "type", na pinipigilan itong magamit upang baguhin ang mga nagmula na klase. Naitalaga rin ang error checking mula sa "__setattr__" na paraan, kaya ang mga uri ng exception sa ilang pagsusuri sa kasapatan ay dapat na ma-update nang naaayon.

Pinagmulan: opennet.ru

Magdagdag ng komento