"super init覆写一个属性"

2024-05-21 05:45:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在子类初始化器中设置一个属性,它似乎被调用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),但没有成功。在


Tags: inselflayerfalsetrueinit子类kwargs
1条回答
网友
1楼 · 发布于 2024-05-21 05:45:35

您看到的是Bidirectional源代码的错误版本。您正在查看的版本似乎是this one,来自三天前。我相信这个版本和你的代码有同样的缺陷。在

我相信的代码是latest release调用super().__init__,在它自己的__init__开始的处:

def __init__(self, layer, merge_mode='concat', weights=None, **kwargs):
    super(Bidirectional, self).__init__(layer, **kwargs)
    ...

这样,它的操作发生在祖先构造函数的操作之后,它的self.stateful的赋值覆盖了它的祖先。在

相关问题 更多 >