Вызвать внешнюю функцию класса Python из Haxe - PullRequest
0 голосов
/ 24 апреля 2018

Давайте предположим, что у меня есть следующий класс в Python:

class TestPy:
    def __init__(self):
        pass
    def f(self):
        return("Hello World")

и я хочу вызвать функцию TestPy.f из Haxe. Затем я могу сообщить компилятору этой функции, указав класс extern через

extern class TestPy { 
    public function new():Void;
    public function f():String;
}

и затем использовать это объявление для вызова этой функции

class Test {
    public static function main():Void {
        var py:TestPy = new TestPy();
        trace(py.f());
    }
}

Компилируется, однако сгенерированный код выглядит так:

# Generated by Haxe 3.4.7
# coding: utf-8
class Text:
    __slots__ = ()
    @staticmethod
    def main():
        py = TestPy()
        print(str(py.f()))
Text.main()

, который не работает, потому что модуль с классом TestPy никогда не импортируется в коде:

NameError: имя 'TestPy' не определено

Итак, мой вопрос: как я могу посоветовать Haxe добавить оператор импорта (например, from testmodule import TestPy) в сгенерированный код?

1 Ответ

0 голосов
/ 25 апреля 2018

Просто добавьте метаданные @:pythonImport в свой extern. Итак, что-то вроде:

@:pythonImport('testmodule', 'TestPy')
extern class TestPy {...

Отказ от ответственности: не проверял это, так что это может быть не совсем правильный ответ, но метаданные документированы в руководстве .

...