我正在子类初始化器中设置一个属性,它似乎被调用super().__init__
覆盖。在
from keras.layers import GRU, wrappers
class Dummy(wrappers.Wrapper):
def __init__(self, layer, **kwargs):
self.stateful = True
print(self.stateful)
super().__init__(layer, **kwargs)
print(self.stateful)
In [3]: dummy = Dummy(GRU(64, stateful=True))
True
False
In [4]: dummy.stateful
Out[4]: False
{I{I在一个子类^中的实现基本上是相同的{I>在一个子类^-inites中使用相同的实现^-I来覆盖}
^{pr2}$不能证明这种行为
In [6]: bidir = wrappers.Bidirectional(GRU(64, stateful=True))
In [7]: bidir.stateful
Out[7]: True
我不能把我的头绕在这上面。我在python3.6下使用keras2.1.3。在
p.S
我已经尝试用子类中的super().__init__(layer, **kwargs)
替换为super(Dummy, self).__init__(layer, **kwargs)
,但没有成功。在
您看到的是
Bidirectional
源代码的错误版本。您正在查看的版本似乎是this one,来自三天前。我相信这个版本和你的代码有同样的缺陷。在我相信的代码是latest release调用
super().__init__
,在它自己的__init__
开始的处:这样,它的操作发生在祖先构造函数的操作之后,它的
self.stateful
的赋值覆盖了它的祖先。在相关问题 更多 >
编程相关推荐