Itusilẹ ti JPype 1.0, awọn ile-ikawe fun iraye si awọn kilasi Java lati Python

Wa ifisilẹ interlayer JPYpe 1.0, eyiti o fun ọ laaye lati ṣeto iraye si kikun ti awọn ohun elo Python si awọn ile-ikawe kilasi Java. Pẹlu JPype lati Python, o le lo awọn ile-ikawe Java-pato lati ṣẹda awọn ohun elo arabara ti o darapọ Java ati koodu Python. Ko dabi Jython, iṣọpọ pẹlu Java kii ṣe nipasẹ ẹda ti iyatọ Python fun JVM, ṣugbọn nipasẹ ibaraenisepo ni ipele ti awọn ẹrọ foju mejeeji nipa lilo iranti pinpin. Ilana ti a dabaa ko gba laaye nikan lati ṣe aṣeyọri iṣẹ ti o dara, ṣugbọn tun pese aaye si gbogbo awọn ile-ikawe CPython ati Java. koodu ise agbese pin nipasẹ iwe-aṣẹ labẹ Apache 2.0.

Awọn iyipada akọkọ:

  • 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__», поэтому типы исключений в некоторых проверках на адекватность должны быть обновлены соответствующе.

orisun: opennet.ru

Fi ọrọìwòye kun