在父类中调用重写的父类方法

mat*_*hak 5 python python-3.x pytorch

我正在尝试覆盖两个父类函数trainevalChildClass. 在父类中,eval()基本上调用train(). 但是,我知道,当我写我的代码如下,eval()父类试图调用该函数train()ChildClass-我想eval()在父类调用train()父类代替。

我只是想知道是否有任何干净的解决方案来进行更改以ChildClass允许父类调用父train()函数?

class ChildClass(nn.Module):
    def __init__(self):
        super(ChildClass, self).__init__()

    def train(self):
        super(ChildClass, self).train()

    def eval(self):
        super(ChildClass, self).eval()
Run Code Online (Sandbox Code Playgroud)

父类位于 Python 包 ( pytorch) 中,因此不应进行任何更改:

class Module(object):
    #...

    def train(self, mode=True):
        # ...
        return self

    def eval(self):
        return self.train(False)
Run Code Online (Sandbox Code Playgroud)

Moh*_*Rao 0

除了调用父级(至少从您共享的代码中)之外,您重写的方法不执行任何操作。

所以,我认为你想要一个与 train()/eval() 具有相同步骤的方法。我想您不需要重写 train() 或 eval(),而是在子类中添加方法并按照您想要混合它们的顺序调用父 train()/eval() 。