尝试 pickle 用户定义时出错 class
Error trying to pickle a user defined class
我刚开始使用 pickle,我正在尝试 pickle 我自己定义的 class 以便我可以在 Flask 应用程序中取消它。
这是我的代码 class:
class wma :
def __init__(self) : pass
def isConsistent(self, df, nConsecutive) :
sum = 0
for i in np.arange(1, nConsecutive + 1) :
sum += i
weights = []
for val in np.arange(1, nConsecutive + 1) :
weight = val / sum
weights.append(weight)
maxWMA = 0
for weight in weights :
maxWMA += weight
result = df[0].rolling(nConsecutive).apply(lambda x : np.sum(weights * x))
currentWMA = results.iloc[-1]
if currentWMA == maxWMA :
return True
else :
return False
这是我尝试腌制它的方法:
wma = wma()
file = open("wma", "wb")
pickle.dump(wma, file)
file.close()
但这给了我错误:
PicklingError: Can't pickle <class '__main__.wma'>: it's not the same object as __main__.wma
我是酸洗新手,所以我不确定哪里出了问题。有什么解决错误的建议吗?
拥有一个 class 和一个同名的 class 的实例通常是一个坏主意,但在这种情况下尤其如此。 Pickling 取决于在全局范围内可用的类型名称,因此当它看到 wma
是一个报告类型为 wma
的变量时(该类型的名称不再存在,因为我们刚刚覆盖了它),它变得混乱。
只需将变量命名为其他名称即可。
my_wma = wma()
file = open("wma", "wb")
pickle.dump(my_wma, file)
file.close()
我刚开始使用 pickle,我正在尝试 pickle 我自己定义的 class 以便我可以在 Flask 应用程序中取消它。
这是我的代码 class:
class wma :
def __init__(self) : pass
def isConsistent(self, df, nConsecutive) :
sum = 0
for i in np.arange(1, nConsecutive + 1) :
sum += i
weights = []
for val in np.arange(1, nConsecutive + 1) :
weight = val / sum
weights.append(weight)
maxWMA = 0
for weight in weights :
maxWMA += weight
result = df[0].rolling(nConsecutive).apply(lambda x : np.sum(weights * x))
currentWMA = results.iloc[-1]
if currentWMA == maxWMA :
return True
else :
return False
这是我尝试腌制它的方法:
wma = wma()
file = open("wma", "wb")
pickle.dump(wma, file)
file.close()
但这给了我错误:
PicklingError: Can't pickle <class '__main__.wma'>: it's not the same object as __main__.wma
我是酸洗新手,所以我不确定哪里出了问题。有什么解决错误的建议吗?
拥有一个 class 和一个同名的 class 的实例通常是一个坏主意,但在这种情况下尤其如此。 Pickling 取决于在全局范围内可用的类型名称,因此当它看到 wma
是一个报告类型为 wma
的变量时(该类型的名称不再存在,因为我们刚刚覆盖了它),它变得混乱。
只需将变量命名为其他名称即可。
my_wma = wma()
file = open("wma", "wb")
pickle.dump(my_wma, file)
file.close()