首页 > 解决方案 > 通过继承访问时类方法不返回值

问题描述

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

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

这是我所拥有的:

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.

标签: pythonpython-3.xoopinheritance

解决方案


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

return super().predict(X, standardize)

推荐阅读