Famoahana ny JPype 1.0, tranomboky hidirana amin'ny kilasy Java avy amin'ny Python

Available famoahana interlayer jpg 1.0, izay ahafahan'ny rindranasa Python manana fidirana feno amin'ny tranomboky kilasy amin'ny fiteny Java. Miaraka amin'ny JPype avy amin'ny Python, azonao atao ny mampiasa tranomboky manokana Java hamorona rindranasa hybrid izay manambatra ny code Java sy Python. Tsy toa an'i Jython, ny fampidirana amin'ny Java dia tsy amin'ny alΓ lan'ny famoronana variana Python ho an'ny JVM, fa amin'ny alΓ lan'ny fifandraisana amin'ny haavon'ny milina virtoaly roa mampiasa fahatsiarovana iombonana. Ny fomba fiasa naroso dia tsy vitan'ny hoe manatratra fahombiazana tsara, fa manome fidirana amin'ny tranomboky CPython sy Java rehetra ihany koa. Kaody tetikasa nozarain'i nahazo alalana tamin'ny Apache 2.0.

Fiovana lehibe:

  • 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__Β», поэтому Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ… Π½Π° Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅.

Source: opennet.ru

Add a comment