我正在尝试在一个名为
ChildClass
的子类中覆盖两个父类函数train
和eval
。在父类中,eval()
基本上会调用train()
。然而,我发现当我像下面这样编写代码时,在父类中的eval()
试图调用ChildClass
中的train()
函数 - 我希望父类中的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)
inspect
检查堆栈帧,并在从父类调用时执行不同的操作,但这是一个巨大的hack。Module.eval
没有调用任何特定类的train
方法;它将这个选择留给了self
绑定到的任何对象。 - chepner