在 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
是不能以这种方式覆盖的属性。
有解决办法吗?在某些情况下,拥有这种行为可能很有用。 最好的问候
最佳答案
以下解决方法可以解决问题:
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.')
它将打印:
原文:光阴似箭。
备选方案:像香蕉一样的果蝇。
我添加了一个参数来说明他的解决方案的普遍性。
关于javascript - 使用 Transcrypt 覆盖方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47847067/