繁体   English   中英

Python 类从类对象调用方法

[英]Python class call a method from a class object

在这种情况下如何修复属性错误? 我有一个 pandas 数据框,我在其中进行了一些数据切片和转换,并且我想绘制 persistence_model 函数的结果,如下所示。

编辑:我想自定义一个具有特定绘图标题、y 和 x 轴的函数,并根据 persitence_model 函数的结果在同一绘图上创建一条水平线。


class ResidualErrors():
    def __init__(self, data: pd.Series):
        self.data = data
    def _persistence_forecast_model_nrows(self, test_rows):
        slicer = test_rows + 1
        errors = self.data[-slicer:].diff().dropna()
        return errors
    def _persistence_forecast_model_percrows(self, train_perc):
        n = len(self.data)
        ntrain = int(n * train_perc)
        errors = self.data[ntrain:].diff().dropna()
        return errors
    def persistence_model(self, test_rows=None, train_perc=None):
        if (not test_rows) and (not train_perc):
            raise TypeError(r"Please provide 'test_rows' or 'train_perc' arguments.")
        if test_rows and train_perc:
            raise TypeError(r"Please choose one argument either 'test_rows' or 'train_perc'.")
        if test_rows:
            return self._persistence_forecast_model_nrows(test_rows)
        else:
            return self._persistence_forecast_model_percrows(train_perc)

    @classmethod
    def plot_residuals(obj):
        obj.plot()
        plt.show()

期望的输出

res = ResidualErrors(data).persistence_model(test_rows=10)

res.plot_residuals()

>> AttributeError: 'Series' object has no attribute 'plot_residuals'

您需要更加了解返回的方法。 第一步创建一个ResidualErrors对象:

res = ResidualErrors(data)

第二步创建一个DataFrameSeries

obj = res.persistence_model(test_rows=10)

您可以在res上调用plot_residuals但不能在obj上调用,就像您目前正在做的那样:

res.plot_residuals(obj)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM