Итак, ключ к загадке здесь в том, что это не совсем код Python, скорее это исходный файл, предназначенный для передачи с VOC - который сгенерирует байт-код Java, который будет дальше обрабатывается для работы в качестве приложения Android с использованием стандартного Android Api.
Как транспортер, VOC полагается на синтаксис, который является допустимым Python, но он позволяет себе брать обходные пути от официального языка - как использование аргументов ключевых слов в определениях классов. Это имело бы смысл только в Python, если бы он наследовал класс, который реализовывал бы специальный метод __init_subclass__
, или использовал бы собственный метакласс для интерпретации этих аргументов - иначе они не имели бы никакого эффекта. Кроме того, VOC, вероятно, использует эти ключевые слова (extends
и implements
), чтобы точно указать эти слова, как они есть в синтаксисе объявления класса Java.
Кроме того, как вы говорите, имя OnClickListener
в том виде, в каком оно есть, может не работать с NameError
в обычном Python - вполне вероятно, что VOC определяет дополнительные имена, которые ведут себя как встроенные имена. В обычном Python, если вы создаете определение функции / метода вместо определения класса, можно использовать не импортированные или неопределенные имена в качестве аннотаций. То есть android.view.View[OnClickListener]
будет следовать :
вместо =
в определении функции. Аннотации лениво оцениваются в Python 3.7 (но не в Python 3.6), поэтому это не приведет к ошибке. Как бы то ни было, он просто вызовет NameError в обычном Python.
Вот быстрый старт для приложений Python для Android, использующих VOC в PyBee https://pybee.org/project/using/android-app/
update ответ был значительно переработан после того, как я узнал о VOC, хотя первые выводы о том, что "это не Python" были правильными)