【问题标题】:Perform an action when a child method is executed执行子方法时执行操作
【发布时间】:2022-06-17 21:43:59
【问题描述】:

我有一个描述编码系统是什么样子的基类:

class Encoder(abc.ABC):
    def __init__(self):
        self._encode_time = []
        self._decode_time = []

    @abc.abstractmethod
    def encode(self, decoded_data: DataMapper, **kwargs) -> Tuple[DataMapper, MetadataCollector]:
        pass

    @abc.abstractmethod
    def decode(self, encoded_data: DataMapper, metadata: MetadataCollector, **kwargs) -> DataMapper:
        pass

这个类被许多其他类继承来描述不同的编码器。 现在,我想为这些模型添加统计信息。比如我想存储每次调用函数时编解码的压缩时间。

例如,像这样的:

class Encoder(abc.ABC):
    def __init__(self):
        self._encode_time = []
        self._decode_time = []

    @abc.abstractmethod
    def encode(self, decoded_data: DataMapper, **kwargs) -> Tuple[DataMapper, MetadataCollector]:
        t1 = time.clock()
        child_call(decoded_data, **kwargs)
        self._encode_time.append(time.clock() - t1)

如何在不更改所有子类的代码的情况下做这样的事情?

【问题讨论】:

标签: python python-3.x


最近更新 更多