3

有没有办法从 JS 原型继承 Transcrypt 类?我有一个 JS 对象类型,它具有我需要保留的相当重的功能集,但我想用 Transcrypt 类中的许多不错的功能扩展它(特别是,我想补充带有 Transcript 运算符重载的笨重的 JS 数学函数)。

我已经尝试了明显的:

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 类?

4

1 回答 1

1

正如您所注意到的,由于对多重继承和绑定函数分配的支持,Transcrypt 类在内部与 JavaScript 类不同。

一个干净的解决方案是制作一个 Transcrypt 外观类,它封装了相应的 JavaScript 类。

因此,要使 Transcrypt 类Y_tr(和其他类)继承自 JavaScript 类X_js,请定义一个 Transcrypt 类,其中类X_tr的对象作为它的唯一属性(由 创建)。然后,您可以继承 from而不是 from 。x_jsX_jsX_tr.__init__Y_trX_trX_js

X_js有方法m_aand m_b,然后X_tr也给出该名称的方法。方法X_tr.m_a只是调用x_js.m_aX_tr.m_b调用x_js.m_b,返回各自的结果。

的属性x_js可以通过X_tr具有相同名称的属性访问。

请注意,X_trandY_tr可以在不使用 的情况下进行实例化__new__,因为self.x_js = __new__ (X_js ())X_tr.__init__.

于 2017-06-02T16:29:32.463 回答