python - 仅当子类重写方法时才执行类属性的 copy()

标签 python inheritance decorator

我正在努力实现以下目标:

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/

相关文章:

python - Tensorflow 上的多 GPU 训练速度比单 GPU 慢

java - jackson 序列化 : how to ignore superclass properties

c++ - 非虚拟地使用虚拟继承的功能?

python - 更改 matplotlib 中内联的文本样式

python - 使用 Python 发布原始数据

java - 访问父类(super class)中的 protected 变量

java - 在 CDI 装饰器之间共享数据

Python装饰器理论

JavaScript 装饰器 : How to store function with this scope?

python - 如何保持行和列的大小与 PyQt5 中的网格布局相同?