Keluaran JPype 1.0, perpustakaan untuk mengakses kelas Java daripada Python

Ada pelepasan lapisan jpg 1.0, yang membolehkan aplikasi Python mempunyai akses penuh kepada perpustakaan kelas dalam bahasa Java. Dengan JPype daripada Python, anda boleh menggunakan perpustakaan khusus Java untuk mencipta aplikasi hibrid yang menggabungkan kod Java dan Python. Tidak seperti Jython, integrasi dengan Java dicapai bukan melalui mencipta varian Python untuk JVM, tetapi melalui interaksi pada tahap kedua-dua mesin maya menggunakan memori dikongsi. Pendekatan yang dicadangkan membolehkan bukan sahaja mencapai prestasi yang baik, tetapi juga menyediakan akses kepada semua perpustakaan CPython dan Java. Kod projek diedarkan oleh berlesen di bawah Apache 2.0.

Perubahan utama:

  • JChar disokong sebagai jenis pulangan. Untuk keserasian, JChar mewarisi daripada "str" ​​​​dan melaksanakan penukaran tersirat kepada "int". Oleh itu, ia lulus cek dalam kontrak. Tetapi ini bermakna ia tidak lagi dianggap sebagai jenis angka dalam Python dan oleh itu isinstance(c, int) menilai kepada False, yang konsisten dengan peraturan penukaran jenis Java.
  • Pengendali telah diperkenalkan untuk menghantar jenis Java, Type@obj (@ ialah operator Python untuk produk dalaman; Java tidak mempunyainya).
  • Menambah notasi untuk mencipta tatasusunan Java. Taip[s1][s2][s3] untuk tatasusunan saiz tetap, Taip[:][:][:] untuk tatasusunan yang akan dibuat kemudian.
  • @FunctionalInterface membolehkan anda mencipta functors Java daripada objek Python dengan __call__.
  • JIterator yang telah ditamatkan telah dialih keluar, penggunaan JException sebagai kilang, get_default_jvm_path dan jpype.reflect.
  • Secara lalai, rentetan Java tidak ditukar kepada rentetan Python.
  • Python telah menghentikan penggunaan "__int__", jadi hantaran tersirat antara jenis integer dan titik terapung akan menghasilkan TypeError.
  • Penggunaan JException telah ditamatkan. Untuk menangkap semua pengecualian, atau semak sama ada objek ialah jenis pengecualian Java, gunakan java.lang.Throwable.
  • Punca pelarian pengecualian Java kini ditunjukkan dalam bingkai tindanan Python.
  • JString telah ditamatkan. Untuk mencipta rentetan Java, atau untuk menyemak sama ada objek daripada jenis rentetan Java, gunakan java.lang.String.
  • Kaedah Repr telah dikemas kini dalam kelas Java.
  • java.util.List melaksanakan kontrak untuk collections.abc.Sequence dan collections.abc.MutableSequence.
  • java.util.Collection melaksanakan kontrak untuk collections.abc.Collection.
  • Kelas Java adalah peribadi dan akan membuang TypeError apabila dilanjutkan daripada Python.
  • Kendalikan Control-C dengan berhati-hati. Versi sebelumnya ranap apabila Java memproses isyarat Control-C kerana ia akan menamatkan Java semasa panggilan. JPype kini akan membuang InterruptedException apabila kembali dari Java. Control-C tidak akan membuang prosedur Java yang besar seperti yang sedang dilaksanakan, kerana Java tidak mempunyai alat khas untuk ini.

Seterusnya, keluaran pembetulan 1.0.1 telah dibuat, yang menambahkan perubahan untuk menyelesaikan masalah dengan keluaran Python 3.8.4. Python telah mengubah logik mengenai penggunaan "__setattr__" untuk "objek" dan "jenis", menghalangnya daripada digunakan untuk mengubah suai kelas terbitan. Semakan ralat juga telah diwakilkan daripada kaedah "__setattr__", jadi jenis pengecualian dalam beberapa semakan kecukupan harus dikemas kini dengan sewajarnya.

Sumber: opennet.ru

Tambah komen