尝试 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()