python - 通过继承访问时类方法不返回值
问题描述
当我尝试通过继承的子类访问时,我有一个类方法停止返回值。
不知道是什么导致它不返回适当的值。
这是我所拥有的:
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
.
解决方案
您正在使用super
从孩子调用父方法,这是正确的,但您需要使用return
返回值:
return super().predict(X, standardize)
推荐阅读
- ios - UIAlertViewConroller 中对 UITextView 的约束
- database - 如何保持不同数据库中的表同步?
- javascript - PHP 禁止从任何移动设备注册,只允许用户从桌面注册
- azure-active-directory - 增量 ARM 模板部署覆盖密钥保管库访问策略中的资源
- mysql - MYSQL/Laravel 迁移将复合键更改为自动增量
- sql - 插入到里面有几个选择
- php - 如何在点击时更改表格中的当前元素值?
- android - 在 Recyclerview 中按 Datewise 从 firestore 检索数据
- c - Xcode Mach-O 链接器 ID 错误
- android - android 上的 Http 客户端(向服务器发送字符串并获取字符串答案)