在另一个子方法中调用从父类继承的子方法

Call a child method inherit from parents inside another child method

Childclass中的方法Eval继承自Parentsclass; Child class 中的方法 FirstOrder 调用 Child class 中的方法 Eval。代码:

class Parents:
     def Eval(self, x):
         return value, grad

class Child(Parents):
     def Eval(self, x):
         super(Child, self).Eval(x)

     def FirstOrder(self, x, x0):
         val, grad = self.Eval(x0)
         return val + grad * (x-x0)

并得到:

TypeError: cannot unpack non-iterable NoneType object

我知道一个简单的解决方案是将 self.Eval(x0) 更改为 super(Child, self).Eval(x0)。但我想知道为什么。据我了解,在FirstOrder中调用self.Eval(x0)将导致在Childclass中定义方法Eval。既然定义明确,那么就调用Eval in Parents class.

您没有从 Child.Eval() 返回任何内容,所以 it returns None implicitly。您只需要添加 return:

def Eval(self, x):
     return super(Child, self).Eval(x)

但是,这不是继承,而是委托。使用继承意味着不定义 Child.Eval()。事实上,这是更好的选择,因为 Child.Eval() 没有做任何额外的事情。