签名与类中的基方法不匹配



请帮助理解如何指定基类方法签名,该签名可以接受至少一个和可能额外的参数。

我需要有一个forward方法,它至少需要X,以及可能不需要的额外参数,这取决于子类。

class Layer:
def forward(self, X, *args) -> float:

子类SoftmaxWithLogLossforwardX和一个额外的参数t

class SoftmaxWithLogLoss(Layer):
def forward(self, X: np.ndarray, T: np.ndarray) -> float:  <--- Signature does not match 

导致Signature of method 'SoftmaxWithLogLoss.forward()' does not match signature of base method in class 'Layer'警告。

请说明原因及解决方法。

我猜是mymyy引发了错误。原因是违反了Liskov替换原则https://en.wikipedia.org/wiki/Liskov_substitution_principle。

所有基类对象必须可以被它们的子类对象替换。但是,由于子类中方法的签名不同,因此不能这样做。

你可以在这里找到更多Mypy产生不兼容的签名错误,但满足Liskov替换原理

相关内容

  • 没有找到相关文章

最新更新