Python から Java クラスにアクセスするためのライブラリ、JPype 1.0 のリリース

利用可能 レイヤーリリース JPype 1.0これにより、Python アプリケーションは Java 言語のクラス ライブラリに完全にアクセスできるようになります。 Python の JPype を使用すると、Java 固有のライブラリを使用して、Java と Python コードを組み合わせたハイブリッド アプリケーションを作成できます。 Jython とは異なり、Java との統合は、JVM の Python バリアントの作成を通じてではなく、共有メモリを使用した両方の仮想マシン レベルでの対話を通じて実現されます。 提案されたアプローチでは、優れたパフォーマンスを達成できるだけでなく、すべての CPython および Java ライブラリへのアクセスも提供します。 プロジェクトコード によって配布 Apache 2.0 に基づいてライセンスされています。

主な変更点:

  • JChar は戻り値の型としてサポートされています。 互換性のために、JChar は「str」から継承し、「int」への暗黙的な変換を実装します。 したがって、契約書のチェックに合格します。 ただし、これは、Python では数値型とはみなされなくなり、isinstance(c, int) が False と評価されることを意味します。これは、Java の型変換規則と一致します。
  • Java 型をキャストする演算子 Type@obj が導入されました (@ は内積を表す Python 演算子です。Java には演算子がありません)。
  • Java 配列を作成するための表記を追加しました。 固定サイズの配列の場合は Type[s1][s2][s3]、後で作成される配列の場合は Type[:][:][:]。
  • @FunctionalInterface を使用すると、__call__ を使用して Python オブジェクトから Java ファンクターを作成できます。
  • 非推奨の JIterator、ファクトリとしての JException の使用、get_default_jvm_path および jpype.reflect を削除しました。
  • デフォルトでは、Java 文字列は Python 文字列に変換されません。
  • Python では「__int__」が非推奨になっているため、整数型と浮動小数点型の間の暗黙的なキャストでは TypeError が生成されます。
  • JException の使用は非推奨になりました。 すべての例外をキャッチするか、オブジェクトが Java 例外タイプであることを確認するには、java.lang.Throwable を使用します。
  • Java 例外のカスケード原因が Python スタック フレームに反映されるようになりました。
  • JString は非推奨になりました。 Java 文字列を作成する場合、またはオブジェクトの型が Java 文字列であることを確認するには、java.lang.String を使用します。
  • Java クラスの Repr メソッドが更新されました。
  • java.util.List は、collections.abc.Sequence および collections.abc.MutableSequence のコントラクトを実行します。
  • java.util.Collection は、collections.abc.Collection のコントラクトを実行します。
  • Java クラスはプライベートであり、Python から拡張すると TypeError をスローします。
  • Control-C は慎重に扱ってください。 以前のバージョンは、Java が Control-C 信号を処理するときにクラッシュします。これは、呼び出し中に Java が終了するためです。 JPype は Java から戻るときに InterruptedException をスローするようになりました。 Java にはこれのための特別なツールがないため、Control-C は現在実装されているような大きな Java プロシージャをスローしません。

次に、Python 1.0.1 リリースの問題を回避するための変更を追加した修正リリース 3.8.4 が作成されました。 Python は、「オブジェクト」と「タイプ」に対する「__setattr__」の使用に関するロジックを変更し、派生クラスの変更に使用できないようにしました。 エラー チェックも "__setattr__" メソッドから委任されているため、一部の適切性チェックの例外タイプはそれに応じて更新される必要があります。

出所: オープンネット.ru

コメントを追加します