发布 JPype 1.0,用于从 Python 访问 Java 类的库

可得到 层释放 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。 Control-C 不会丢弃当前实现的大型 Java 程序,因为 Java 没有专门的工具来执行此操作。

接下来,创建了修正版本 1.0.1,其中添加了一些更改来解决 Python 3.8.4 版本的问题。 Python 更改了有关“对象”和“类型”使用“__setattr__”的逻辑,防止它被用于修改派生类。 错误检查也由“__setattr__”方法委托,因此某些充分性检查中的异常类型应相应更新。

来源: opennet.ru

添加评论