我试图在train
中覆盖两个父类函数eval
和ChildClass
。在父类中,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)
答案 0 :(得分:0)
您的重写方法除了调用父级(至少从您共享的代码中)起没有任何作用。
所以,我想您想拥有一种方法,该方法具有与train()/ eval()中相同的步骤。 我猜您不需要重写train()或eval(),而是在子类中添加方法,并以您想要混合它们的任何顺序调用父train()/ eval()。