Rilascio di JPype 1.0, librerie per l'accesso alle classi Java da Python

A disposizione rilascio dello strato JPype 1.0, che consente alle applicazioni Python di avere pieno accesso alle librerie di classi nel linguaggio Java. Con JPype di Python, puoi utilizzare librerie specifiche di Java per creare applicazioni ibride che combinano codice Java e Python. A differenza di Jython, l'integrazione con Java si ottiene non creando una variante Python per la JVM, ma attraverso l'interazione a livello di entrambe le macchine virtuali utilizzando la memoria condivisa. L'approccio proposto consente non solo di ottenere buone prestazioni, ma fornisce anche l'accesso a tutte le librerie CPython e Java. Codice del progetto distribuito da concesso in licenza con Apache 2.0.

Principali modifiche:

  • JChar è supportato come tipo restituito. Per compatibilità, JChar eredita da "str" ​​e implementa una conversione implicita in "int". Pertanto, supera i controlli nei contratti. Ma ciò significa che non è più considerato un tipo numerico in Python e quindi isinstance(c, int) restituisce False, il che è coerente con le regole di conversione del tipo Java.
  • È stato introdotto un operatore per eseguire il cast di un tipo Java, Type@obj (@ è un operatore Python per il prodotto interno; Java non ne ha uno).
  • Aggiunta notazione per la creazione di array Java. Digitare[s1][s2][s3] per array di dimensioni fisse, Digitare[:][:][:] per array che verranno creati in seguito.
  • @FunctionalInterface ti consente di creare funtori Java da oggetti Python con __call__.
  • Rimosso JIterator deprecato, uso di JException come factory, get_default_jvm_path e jpype.reflect.
  • Per impostazione predefinita, le stringhe Java non vengono convertite in stringhe Python.
  • Python ha deprecato "__int__", quindi i cast impliciti tra tipi interi e a virgola mobile produrranno un TypeError.
  • L'uso di JException è stato deprecato. Per rilevare tutte le eccezioni o verificare che un oggetto sia un tipo di eccezione Java, utilizzare java.lang.Throwable.
  • Le cause a cascata delle eccezioni Java si riflettono ora negli stack frame Python.
  • JString è stato deprecato. Per creare una stringa Java o per verificare che un oggetto sia di tipo stringa Java, utilizzare java.lang.String.
  • I metodi repr sono stati aggiornati nelle classi Java.
  • java.util.List esegue contratti percollections.abc.Sequence ecollections.abc.MutableSequence.
  • java.util.Collection esegue il contratto percollections.abc.Collection.
  • Le classi Java sono private e genereranno TypeError quando estese da Python.
  • Maneggiare Control-C con attenzione. Le versioni precedenti si bloccano quando Java elabora un segnale Control-C perché termineranno Java durante la chiamata. JPype ora lancerà un'InterruptedException al ritorno da Java. Control-C non eliminerà grandi procedure Java come attualmente implementate, poiché Java non dispone di uno strumento speciale per questo.

Successivamente, è stata creata una versione correttiva 1.0.1, che ha aggiunto modifiche per risolvere i problemi con la versione Python 3.8.4. Python ha cambiato la logica relativa all'uso di "__setattr__" per "oggetto" e "tipo", impedendone l'utilizzo per modificare le classi derivate. Anche il controllo degli errori è stato delegato dal metodo "__setattr__", quindi i tipi di eccezione in alcuni controlli di adeguatezza dovrebbero essere aggiornati di conseguenza.

Fonte: opennet.ru

Aggiungi un commento