使用Transcrypt覆盖方法

时间:2017-12-16 15:15:39

标签: javascript python transcrypt

在Python中,覆盖方法是有效的,例如:

class A():
    def original(self):
        print("original")

def alternative(self):
    print("alternative")

A.original = alternative
a = A()
a.original()

将打印alternative。但在转换为Javascript之后,您将收到错误:Uncaught TypeError: Cannot set property original of function...

当然,这与它被转化为:

的事实有关
var A = __class__ ('A', [object], {
    __module__: __name__,
    get original () {return __get__ (this, function (self) {
        print ('original');
    });}
});

其中original是一个无法以这种方式覆盖的属性。

有解决方法吗?在某些情况下,这种行为很有用。 最好的问候

1 个答案:

答案 0 :(得分:1)

以下解决方法可以解决问题:

class A():
    def original (self, anArg):
        print ('Original:', anArg)

def alternative (self, anArg):
    print ('Alternative:', anArg)

a0 = A ()
a0.original ('Time flies like an arrow.')

__pragma__ ('js', '{}', '''Object.defineProperty (A, "original", {
    get: function (self) {return __get__ (this, alternative)}
})''')

a1 = A()
a1.original ('Fruit flies like a banana.')

它将打印:

Original: Time flies like an arrow. Alternative: Fruit flies like a banana.

我添加了一个论证来说明他的解决方案的一般性。