Это потому, что свойства в Haxe являются функцией времени компиляции и не генерируют собственные свойства.Не все цели даже имеют свойства, и те, которые, вероятно, не на 100% соответствуют семантике Haxe.
Вместо этого доступ к свойству заменяется вызовами методов доступа (get_field()
, set_field()
) при компиляциивремя.Следовательно,
trace(testField);
при компиляции в Python превращается в следующее:
print(str(self.get_testField()))
Таким образом, чтобы получить согласованные результаты, вам нужно будет также вызвать get_testField()
на стороне Python.
Для целей C # и Flash существуют метаданные для генерации собственных свойств (см. haxe --help-metas
):
@:property
- Помечает поле свойства для компиляции какСобственное свойство C # (только cs)
@:getter
- (Имя поля класса) Создает встроенную функцию получения для данного поля (только флэш-память)
@:setter
- (Имя поля класса)Генерирует встроенную функцию установки для заданного поля (только флэш-память)
Обратите внимание, что целевая область C # @:property
работает только для свойств без физического поля .В вашем примере (get, null)
пришлось бы заменить на (get, never)
, чтобы он заработал.
В настоящее время существует запрос открытой функции для поддержки собственных свойств цели JS через @:property
.Это также может иметь смысл для Python, учитывая, что он тоже имеет нативные свойства.Возможно, рассмотрите возможность открытия вопроса.:)