通过继承访问时,类方法不返回值

时间:2019-06-01 01:46:36

标签: python python-3.x oop inheritance

我有一个类方法,当我尝试通过继承的子类进行访问时,该方法停止返回值。

不知道是什么原因导致它不返回适当的值。

这就是我所拥有的:

class KNN():    
    def __init__(self, neighbors=5, centered=True):
        self.neighbors = neighbors
        self.centered  = centered

    def _get_distance(self, xi):
        return np.sqrt(((xi - self.X_fit)**2).sum(1))

    def fit(self, X, y):
        if self.centered:
            self.X_fit = standardize(X)
        else:
            self.X_fit = X
        self.y_fit     = y

    def predict(self, X, centered=False):
        m, n              = X.shape[0], self.X_fit.shape[0]
        self.dist_matrix  = np.zeros((m, n))
        X_pred            = np.zeros(X.shape)

        if standardize:
           X_pred  = standardize(X)
        else:
           X_pred  = X

        for row in range(m):
            self.dist_matrix[row] = self._get_distance(X_pred[row])

        self.idx_vals      = np.argsort(self.dist_matrix)[:, :self.neighbors]
        self.y_idx         = self.y_fit[self.idx_vals]
        self.preds         = [self.neighbor_calculation(self.y_idx[i]) for i in range(len(self.y_idx))]
        return self.preds

如果我直接访问KNN类,则predict方法将按预期工作,并返回一组预测值。

但是,当我尝试创建从KNN继承的子类时,它会停止:

class KNNClassifier(KNN):
    def predict(self, X, centered=False):
        self.neighbor_calculation = majority_vote
        super().predict(X, standardize)

当我通过predict类访问KNNClassifier方法时,它没有返回值。

但是,self.preds包含实际的预测。

但是尝试类似KNNClassifier.predict(X)[:10]的操作会出现错误消息:

'NoneType' object is not subscriptable'

我不知道为什么返回的值突然被解释为None

1 个答案:

答案 0 :(得分:1)

您正在使用super从子级中调用父方法,这是正确的,但是您需要使用return返回值:

return super().predict(X, standardize)