python - 签名与类中的基方法不匹配
问题描述
请帮助了解如何指定基类方法签名,该签名至少可以采用一个可能还有其他参数。
我需要一个forward
至少需要 X 的方法,以及根据子类可能不需要的其他参数。
class Layer:
def forward(self, X, *args) -> float:
子类 SoftmaxWithLogLossforward
有X
一个附加参数 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'
。
请解释原因是什么以及如何解决。
解决方案
我猜是 mypy 引发了错误。原因是违反了 Liskov 替换原则https://en.wikipedia.org/wiki/Liskov_substitution_principle。
所有基类对象都必须可以用它们的子类对象替换。但是由于子类中方法的签名不同,所以不能这样做。
您可以在此处找到更多信息 Mypy 产生不兼容的签名错误,但满足 Liskov 替换原则
推荐阅读
- python - django 创建具有空外键的对象
- json - 如何将环境变量添加到 app.json 文件
- c - 如何在介子交叉文件中指定库及其包含
- django - 如何通过 Django EmailMessage 将存储在云中的图像作为附件发送
- ios - Swift:UICollectionView sizeForItemAt 永远不会被执行
- python - python从父对象实例化子实例
- c++ - 在 C++ 中创建内联多维数组
- python - 为什么这个列表理解没有给出正确的输出
- mongodb - 在 MongoDB 文档中使用 $inc 函数
- javascript - JavaScript轮播中导航的左右转换