我有一个类方法,当我尝试通过继承的子类进行访问时,该方法停止返回值。
不知道是什么原因导致它不返回适当的值。
这就是我所拥有的:
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
。
答案 0 :(得分:1)
您正在使用super
从子级中调用父方法,这是正确的,但是您需要使用return
返回值:
return super().predict(X, standardize)