Sortie de JPype 1.0, bibliothèques pour accéder aux classes Java depuis Python

Disponible libération de couche JPype 1.0, qui permet aux applications Python d'avoir un accès complet aux bibliothèques de classes du langage Java. Avec JPype de Python, vous pouvez utiliser des bibliothèques spécifiques à Java pour créer des applications hybrides combinant le code Java et Python. Contrairement à Jython, l'intégration avec Java se fait non pas par la création d'une variante Python pour la JVM, mais par l'interaction au niveau des deux machines virtuelles utilisant la mémoire partagée. L'approche proposée permet non seulement d'obtenir de bonnes performances, mais donne également accès à toutes les bibliothèques CPython et Java. Code de projet distribué par sous licence Apache 2.0.

Les principaux changements:

  • JChar est pris en charge comme type de retour. Pour des raisons de compatibilité, JChar hérite de "str" ​​​​et implémente une conversion implicite en "int". Par conséquent, il passe les contrôles dans les contrats. Mais cela signifie qu'il n'est plus considéré comme un type numérique en Python et que isinstance(c, int) est donc évalué à False, ce qui est cohérent avec les règles de conversion de type Java.
  • Un opérateur a été introduit pour convertir un type Java, Type@obj (@ est un opérateur Python pour le produit interne ; Java n'en a pas).
  • Ajout d'une notation pour créer des tableaux Java. Type[s1][s2][s3] pour les tableaux de taille fixe, Type[:][:][:] pour les tableaux qui seront créés ultérieurement.
  • @FunctionalInterface vous permet de créer des foncteurs Java à partir d'objets Python avec __call__.
  • Suppression de JIterator obsolète, utilisation de JException comme usine, get_default_jvm_path et jpype.reflect.
  • Par défaut, les chaînes Java ne sont pas converties en chaînes Python.
  • Python est obsolète "__int__", donc les conversions implicites entre les types entiers et les types à virgule flottante produiront une TypeError.
  • L'utilisation de JException est obsolète. Pour intercepter toutes les exceptions ou vérifier qu'un objet est un type d'exception Java, utilisez java.lang.Throwable.
  • Les causes en cascade des exceptions Java sont désormais reflétées dans les cadres de pile Python.
  • JString est obsolète. Pour créer une chaîne Java, ou pour vérifier qu'un objet est de type chaîne Java, utilisez java.lang.String.
  • Les méthodes Repr ont été mises à jour dans les classes Java.
  • java.util.List exécute les contrats pour collections.abc.Sequence et collections.abc.MutableSequence.
  • java.util.Collection exécute le contrat pour collections.abc.Collection.
  • Les classes Java sont privées et généreront TypeError lorsqu'elles seront étendues à partir de Python.
  • Manipulez Control-C avec précaution. Les versions précédentes plantent lorsque Java traite un signal Control-C car elles mettront fin à Java pendant l'appel. JPype lancera désormais une InterruptedException lors du retour de Java. Control-C ne supprimera pas les grandes procédures Java telles qu'elles sont actuellement implémentées, car Java ne dispose pas d'un outil spécial pour cela.

Ensuite, une version corrective 1.0.1 a été créée, qui a ajouté des modifications pour contourner les problèmes avec la version Python 3.8.4. Python a modifié la logique concernant l'utilisation de « __setattr__ » pour « objet » et « type », l'empêchant d'être utilisé pour modifier des classes dérivées. La vérification des erreurs a également été déléguée par la méthode « __setattr__ », de sorte que les types d'exception dans certains contrôles d'adéquation doivent être mis à jour en conséquence.

Source: opennet.ru

Ajouter un commentaire