在python中属性更改时设置属性

时间:2016-01-21 00:22:51

标签: python pandas

我有一个具有pandas数据帧属性的类。我想在同一个类中定义另一个属性,该属性在更改数据帧时会发生变化。我认为一个二传手可能是正确的方法,但我无法让它工作。这是一个玩具示例:

import pandas as pd

class Foo(object):
    def __init__(self, df=None):
        self._df = df
        self.altered = False # bool, set to True if self._df changes
    @property
    def df(self):
        return self._df
    @df.setter
    def df(self, df):
        self.altered = True # since _df might change here set self.altered True
        self._df = df

df_test = pd.DataFrame([[1,2,3]], columns=['a','b','c']) 
cl = Foo(df_test)
cl.df.loc[0, 'a'] = 3 # change a default value in dataframe
print(cl.df)
print(cl.altered)

打印更改的数据帧,但cl.altered仍然设置为False。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

我对熊猫的了解并不多。但是没有调用setter,因为该行是:

cl.df.loc[0, 'a'] = 3

如果该行是:

,则会调用它
cl.df = 3

您可以做的一件事是在初始化实例时存储原始df的副本,并执行以下操作:

@property
def altered(self):
    return self._orig_df == self._current_df