有没有办法从JS原型继承Transcrypt类?我有一个JS对象类型,它具有我需要保留的相当多的功能,但我想在Transcrypt类中提供很多很好的功能(特别是,我想补充一下)笨拙的JS数学函数与Transcript运算符重载)。
我已经尝试过显而易见的事了:
class MyClass (MyJSClass):
....
但这不起作用,因为JS类没有Transcrypt的“魔术方法”。
我也尝试过向JS原型添加方法:
def add_repr(orig):
def v_repr(self):
return "(inherited JS Object)"
orig.prototype.__repr__ = v_repr
add_repr(MyJSClass)
print (__new__(MyJSClass()))
但是在这种情况下,repr
永远不会被调用,因为Transcrypt正在寻找其他魔术方法或标识符而找不到它们因此它不会寻找repr
是否有人制定了一种方法,可以追溯将JS原型转换为Transcrypt类,还是从JS原型继承Transcrypt类?
答案 0 :(得分:1)
正如您所注意到的,Transcrypt类在内部与JavaScript类不同,因为它支持多重继承和绑定函数赋值。
一个干净的解决方案是创建一个Transcrypt外观类,它封装了相应的JavaScript类。
因此,要使Transcrypt类Y_tr
(和其他类)继承自JavaScript类X_js
,请使用类{{1}的对象X_tr
定义Transcrypt类x_js
作为它的唯一属性(由X_js
创建)。然后,您可以X_tr.__init__
继承Y_tr
而不是X_tr
。
说X_js
有方法X_js
和m_a
,然后按名称提供m_b
方法。方法X_tr
只需调用X_tr.m_a
和x_js.m_a
即可调用X_tr.m_b
,并返回相应的结果。
x_js.m_b
的属性可以通过具有相同名称的x_js
属性进行访问。
请注意,X_tr
和X_tr
可以在不使用Y_tr
的情况下进行实例化,因为__new__
已在self.x_js = __new__ (X_js ())
中完成。