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

时间:2018-12-18 11:46:26

标签: python python-3.x pytorch

我试图在train中覆盖两个父类函数evalChildClass。在父类中,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()

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

class Module(object):
    #...

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

    def eval(self):
        return self.train(False)

1 个答案:

答案 0 :(得分:0)

您的重写方法除了调用父级(至少从您共享的代码中)起没有任何作用。

所以,我想您想拥有一种方法,该方法具有与train()/ eval()中相同的步骤。 我猜您不需要重写train()或eval(),而是在子类中添加方法,并以您想要混合它们的任何顺序调用父train()/ eval()。