Phát hành JPype 1.0, các thư viện để truy cập các lớp Java từ Python

Có sẵn phát hành lớp JPype 1.0, cho phép các ứng dụng Python có toàn quyền truy cập vào các thư viện lớp bằng ngôn ngữ Java. Với JPype từ Python, bạn có thể sử dụng các thư viện dành riêng cho Java để tạo các ứng dụng lai kết hợp mã Java và Python. Không giống như Jython, việc tích hợp với Java đạt được không phải thông qua việc tạo một biến thể Python cho JVM mà thông qua sự tương tác ở cấp độ của cả hai máy ảo sử dụng bộ nhớ dùng chung. Cách tiếp cận được đề xuất không chỉ cho phép đạt được hiệu suất tốt mà còn cung cấp quyền truy cập vào tất cả các thư viện CPython và Java. Mã số dự án phân phối bởi được cấp phép theo Apache 2.0.

Sự thay đổi chính:

  • JChar được hỗ trợ dưới dạng kiểu trả về. Để tương thích, JChar kế thừa từ "str" ​​​​và thực hiện chuyển đổi ngầm thành "int". Vì vậy, nó vượt qua kiểm tra trong hợp đồng. Nhưng điều này có nghĩa là nó không còn được coi là kiểu số trong Python và do đó isinstance(c, int) đánh giá là Sai, phù hợp với các quy tắc chuyển đổi kiểu Java.
  • Một toán tử đã được giới thiệu để truyền kiểu Java, Type@obj (@ là toán tử Python cho sản phẩm bên trong; Java không có).
  • Đã thêm ký hiệu để tạo mảng Java. Type[s1][s2][s3] cho các mảng có kích thước cố định, Type[:][:][:] cho các mảng sẽ được tạo sau này.
  • @FunctionalInterface cho phép bạn tạo các hàm Java từ các đối tượng Python bằng __call__.
  • Đã xóa JIterator không được dùng nữa, sử dụng JException làm nhà máy, get_default_jvm_path và jpype.reflect.
  • Theo mặc định, chuỗi Java không được chuyển đổi thành chuỗi Python.
  • Python đã không dùng "__int__", do đó, việc chuyển đổi ngầm định giữa kiểu số nguyên và kiểu dấu phẩy động sẽ tạo ra TypeError.
  • Việc sử dụng JException không còn được dùng nữa. Để nắm bắt tất cả các ngoại lệ hoặc kiểm tra xem một đối tượng có phải là loại ngoại lệ Java hay không, hãy sử dụng java.lang.Throwable.
  • Nguyên nhân xếp tầng của các ngoại lệ Java hiện được phản ánh trong các khung ngăn xếp của Python.
  • JString không còn được dùng nữa. Để tạo một chuỗi Java hoặc để kiểm tra xem một đối tượng có thuộc loại chuỗi Java hay không, hãy sử dụng java.lang.String.
  • Các phương thức Repr đã được cập nhật trong các lớp Java.
  • java.util.List thực thi các hợp đồng cho Collection.abc.Sequence và Collection.abc.MutableSequence.
  • java.util.Collection thực thi hợp đồng cho Collection.abc.Collection.
  • Các lớp Java là riêng tư và sẽ ném ra TypeError khi được mở rộng từ Python.
  • Xử lý Control-C cẩn thận. Các phiên bản trước gặp sự cố khi Java xử lý tín hiệu Control-C vì chúng sẽ chấm dứt Java trong khi gọi. Bây giờ JPype sẽ ném ra Ngoại lệ InterruptedException khi trở về từ Java. Control-C sẽ không loại bỏ các thủ tục Java lớn như được triển khai hiện tại, vì Java không có công cụ đặc biệt cho việc này.

Tiếp theo, bản phát hành khắc phục 1.0.1 đã được tạo, bổ sung các thay đổi để khắc phục sự cố với bản phát hành Python 3.8.4. Python đã thay đổi logic liên quan đến việc sử dụng "__setattr__" cho "đối tượng" và "loại", ngăn không cho nó được sử dụng để sửa đổi các lớp dẫn xuất. Việc kiểm tra lỗi cũng đã được ủy quyền từ phương pháp "__setattr__", do đó, các loại ngoại lệ trong một số kiểm tra tính thỏa đáng phải được cập nhật tương ứng.

Nguồn: opennet.ru

Thêm một lời nhận xét