【发布时间】:2019-04-24 09:16:40
【问题描述】:
我编写了一个 python 程序来尝试使用面向对象编程对我的机器学习预测进行评分,并且我正在尝试将函数链接在一起。就像说:
answers = predictionsGrader().merge_on('PassengerId').compare("Survived_x", "Survived_y").grade()
但是,我的代码开始抛出属性错误的错误。
AttributeError: 'NoneType' object has no attribute 'compare'
在尝试了解问题所在后,我意识到虽然初始化返回的是一个对象,
<class 'predictionsGrader.predictionsGrader'>
初始化后调用的函数(即merge_on 函数)返回NoneType
<class 'NoneType'>
请问有什么问题。完整代码如下:
import pandas as pd
class predictionsGrader():
def __init__(self, predictions, target):
self.correct = []
self.predictions = predictions
self.target = target
return
def merge_on(self, row):
self.row = row
self.md = pd.merge(self.predictions, self.target, on=[self.row])
return
def compare(self, predicted_target, confirmed_target):
self.predicted_target = predicted_target or "predicted_target"
self.confirmed_target = confirmed_target or "confirmed_target"
return
def grade(self):
for x in range(len(self.md[self.predicted_target])):
if (self.md[self.predicted_target][x] == self.md[self.confirmed_target][x]):
self.correct.append("right")
else:
self.correct.append("wrong")
return self.correct
【问题讨论】:
-
因为
__init__是特殊的(与其他双下划线函数一样)。另请参阅stackoverflow.com/questions/2491819/…。 -
如果你真的想要得到你想要的,你可以把
return self放在你其他方法的末尾。但我建议不要这样做;至少不适用于不构造对象的常规方法。 -
所有方法默认返回
None。如果您想退回其他东西,这取决于您。 (顺便说一句,你的空returns 在你的问题中什么也不做)。
标签: python class oop object nonetype