Transcrypt:继承自 JS 原型?
Transcrypt: Inherit from a JS prototype?
有什么方法可以从 JS 原型继承 Transcrypt class?我有一个 JS 对象类型,它有很多我需要保留的功能,但我想用 Transcrypt class 中的很多不错的功能来扩展它(特别是,我'我想用 Transcript 运算符重载来补充笨重的 JS 数学函数)。
我试过显而易见的方法:
class MyClass (MyJSClass):
....
但这不起作用,因为 JS class 没有 Transcrypt 的 "magic methods"。
我也试过向 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 class 或从 JS 原型继承 Transcrypt class?
如您所见,Transcrypt classes 在内部不同于 JavaScript classes,因为它支持多重继承和绑定函数分配。
一个干净的解决方案是制作一个 Transcrypt facade class,封装相应的 JavaScript class.
所以要使 Transcrypt class Y_tr
(和其他 classes)继承自 JavaScript class X_js
,定义一个 Transcrypt class X_tr
具有 class 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_tr
的属性访问 x_js
的属性。
请注意,X_tr
和 Y_tr
可以在不使用 __new__
的情况下实例化,因为 self.x_js = __new__ (X_js ())
是在 X_tr.__init__
中完成的。
有什么方法可以从 JS 原型继承 Transcrypt class?我有一个 JS 对象类型,它有很多我需要保留的功能,但我想用 Transcrypt class 中的很多不错的功能来扩展它(特别是,我'我想用 Transcript 运算符重载来补充笨重的 JS 数学函数)。
我试过显而易见的方法:
class MyClass (MyJSClass):
....
但这不起作用,因为 JS class 没有 Transcrypt 的 "magic methods"。
我也试过向 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 class 或从 JS 原型继承 Transcrypt class?
如您所见,Transcrypt classes 在内部不同于 JavaScript classes,因为它支持多重继承和绑定函数分配。
一个干净的解决方案是制作一个 Transcrypt facade class,封装相应的 JavaScript class.
所以要使 Transcrypt class Y_tr
(和其他 classes)继承自 JavaScript class X_js
,定义一个 Transcrypt class X_tr
具有 class 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_tr
的属性访问 x_js
的属性。
请注意,X_tr
和 Y_tr
可以在不使用 __new__
的情况下实例化,因为 self.x_js = __new__ (X_js ())
是在 X_tr.__init__
中完成的。