ИзданиС Π½Π° JPype 1.0, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π·Π° пристап Π΄ΠΎ Java класи ΠΎΠ΄ Python

Достапно ΠΌΠ΅Ρ“ΡƒΡΠ»ΠΎΡ˜Π½ΠΎ ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡƒΠ²Π°ΡšΠ΅ JPype 1.0, кој Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ цСлосСн пристап Π½Π° Python Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π΄ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΠΎΠ΄ класата Java. Π‘ΠΎ JPype ΠΎΠ΄ Python, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° користитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ спСцифични Π·Π° Java Π·Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Ρ…ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π°Ρ‚ Java ΠΈ Python ΠΊΠΎΠ΄. Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΠ΄ Jython, ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° со Java сС постигнува Π½Π΅ ΠΏΡ€Π΅ΠΊΡƒ создавањС Π½Π° Π²Π°Ρ€ΠΈΡ˜Π°Π½Ρ‚Π° Π½Π° Python Π·Π° JVM, Ρ‚ΡƒΠΊΡƒ ΠΏΡ€Π΅ΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° Π΄Π²Π΅Ρ‚Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈ машини ΠΊΠΎΠΈ користат Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠ° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΎΡ‚ пристап ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π½Π΅ само Π΄Π° сС постигнат Π΄ΠΎΠ±Ρ€ΠΈ пСрформанси, Ρ‚ΡƒΠΊΡƒ ΠΈ сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° пристап Π΄ΠΎ ситС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ 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 позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Java-Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈΠ· Python-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с __call__.
  • Π£Π΄Π°Π»Π΅Π½Ρ‹ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ 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 выполняСт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ for collections.abc.Collection.
  • Java-классы Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ TypeError ΠΏΡ€ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ ΠΈΠ· Python.
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Control-C Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ вСрсии ΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΊΠΎΠ³Π΄Π° Java ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Control-C сигнал, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ Java Π²ΠΎ врСмя Π²Ρ‹Π·ΠΎΠ²Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ JPype создаст InterruptedException, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈΠ· Java. Control-C Π½Π΅ Π²Ρ‹ΠΊΠΈΠ½Π΅Ρ‚ ΠΈΠ· Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Java-ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, ΠΊΠ°ΠΊ сСйчас Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Java Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ срСдства для этого.

Π‘Π»Π΅Π΄ΠΎΠΌ сформирован ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ выпуск 1.0.1, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ измСнСния для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Ρ€Π΅Π»ΠΈΠ·ΠΎΠΌ Python 3.8.4. Python ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ использования Β«__setattr__Β» Π΄Π»Ρ Β«objectΒ» ΠΈ Β«typeΒ», прСдотвращая Π΅Ρ‘ использованиС для измСнСния ΠΏΠΎΡ€ΠΎΠΆΠ΄Ρ‘Π½Π½Ρ‹Ρ… классов. Π•Ρ‰Ρ‘ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ошибки Π±Ρ‹Π»Π° Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Β«__setattr__Β», поэтому Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ… Π½Π° Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅.

Π˜Π·Π²ΠΎΡ€: opennet.ru

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€