Transcrypt: объект JavaScript в объект Python
Я пытаюсь создать привязку Python для XGL ( https://www.xalys.com/) с помощью Transcrypt.
Со стороны Python я обнаружил, что вы можете наследовать и расширять объекты JavaScript, делать то, что вы хотите, и передавать их обратно в библиотеку JavaScript.
Аналогично привязке React, найденной здесь https://github.com/doconix/pyreact/blob/master/src/scripts/pyreact.py, я делаю:
class ComponentMeta(type):
def __new__ (meta, name, bases, attribs):
cls = type.__new__ (meta, name, bases, attribs)
descrip = Object.getOwnPropertyDescriptor(cls, 'name')
descrip.value = name
Object.defineProperty(cls, 'name', descrip)
return cls
class AbstractComponent(object, metaclass=ComponentMeta):
def __init__(self, props):
object.__init__(self)
class MyClass(AbstractComponent, MyJsClass.prototype):
def __init__(self, a, b):
AbstractComponent.__init__(self)
MyJsClass.apply(self, [ a, b ])
def doSomething(self):
# Calling js method doSomething
MyJsClass.prototype.doSomething.call(self)
def doSomethingElse(self, myObject: MyClass):
# Calling js method doSomethingElse
MyJsClass.prototype.doSomethingElse.call(self, myObject)
def doSomethingElse(self) -> MyClass:
# Calling js method giveMeAnotherInstance, returns a new instance of MyJsClass
return MyJsClass.prototype.giveMeAnotherInstance.call(self)
myObject = MyClass(1, 2)
mySecondObject = MyClass(2, 3)
# Call a js method
myObject.doSomething()
# Call another js method with a Python Object (but valid Javascript Object)
myObject.doSomethingElse(mySecondObject)
# Get a new instance
myThirdObject:MyClass = myObject.giveMeAnotherInstance()
type(myThirdObject) is MyClass # returns false
Как я могу преобразовать объект myThirdObject в допустимый объект MyClass?
В Java (с GWT) и в C# (с Bridge.Net) очень легко переключаться между языком и JavaScript, я что-то пропускаю с Transcrypt?
Я старался:
def doSomethingElse(self) -> MyClass:
# Calling js method giveMeAnotherInstance, returns a new instance of MyJsClass
return dict(MyJsClass.prototype.giveMeAnotherInstance.call(self))
Но это не работает...