我正在努力实现以下目标:
class Data(object):
def __init__(self, data):
self.data = data
self.valid = False
#Analyze and validate data
self.preprocess_data()
self.validate_data()
def preprocess_data():
pass
def validate_data():
#process data
class MyData(Data):
def __init__():
super(MyData,self).__init__(data)
def preprocess_data(self):
#preprocess it
当子类执行重写的preprocess_data
方法时,我想自动执行以下操作: self.data = self.data.copy()
如何才能做到这一点(如果有的话)?我考虑过装饰 preprocess
但我不认为在基类中装饰的重写方法会继承“装饰”
最佳答案
class Data(object):
def __init__(self, data):
self.data = data
self.valid = False
#Analyze and validate data
self._preprocess_data()
self.validate_data()
def _preprocess_data(self):
if self.preprocess_data.im_func != Data.preprocess_data.im_func:
self.data = self.data.copy()
return self.preprocess_data()
这测试 self.preprocess_data
背后的函数是否是 Data.preprocess_data
;如果没有,它会复制您的数据。当然,这需要您在类中调用_preprocess_data
,以便实际执行附加代码。
关于python - 仅当子类重写方法时才执行类属性的 copy(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10749547/