python - 有没有办法确保函数被覆盖?

标签 python

我有一个类,我希望能够以不同的频率运行类(class)的 child :每分钟或每秒。我使用枚举来决定是每秒、每分钟、两者都被调用,还是两者都不被调用。这是一个例子:

from enum import Flag, auto
import time


class FREQUENCY(Flag):
    MINUTELY = auto()  # call every_minute
    SECONDLY = auto()  # call every_second


class Parent:
    def __init__(self, frequency):
        self.frequency = frequency

    def every_minute(self):
        raise NotImplementedError()

    def every_second(self):
        raise NotImplementedError()


class HighFrequencyIdea(Parent):
    def __init__(self):
        super().__init__(FREQUENCY.SECONDLY)  # oops!

    def every_minute(self):
        print("I expect to be called every minute but I put wrong frequency")

    def every_second(self):
        print("I am called every second")


if __name__ == "__main__":
    obj = HighFrequencyIdea()
    elapse = 0
    while True:
        time.sleep(1)
        elapse += 1
        if FREQUENCY.SECONDLY in obj.frequency:
            obj.every_second()
        if FREQUENCY.MINUTELY in obj.frequency and elapse % 60 == 0:
            obj.every_minute()

有没有办法阻止 Parent 类的子级实现他们没有设置正确频率的东西(在这种情况下,尽管频率为 FREQUENCY.SECONDLY,但在实现 every_month 时会犯一些错误 - 或者有一个FREQUENCY.SECONDLY|FREQUENCY.minly 的频率或在 HighFrequencyIdea 中实现 every_second 是可以接受的,但实现 every_month while没有 FREQUENCY.monthly 是 Not Acceptable )。

最佳答案

这是一个设计糟糕的抽象。 拥有一个名为 tick(...) 的单一方法来执行与 Frequency() 属性一起执行的操作怎么样?

关于python - 有没有办法确保函数被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72006521/

相关文章:

php - 将参数添加到从 Python 调用的 PHP 脚本

python - M1 Mac : Running Brownie Python

python - 确定 ‘data’ 的平均值,其中 CONTINUOUS cond=True 的最高数量

python - Suds 数组的数组不嵌套

python - 我可以同时为 Windows 和 Linux 平台编写 Python Web 应用程序吗?

python - 如何在 Bootstrap 卡组/卡片中实现搜索功能?

python - 使用gnu编译器/默认C++库在Raspberry Pi 4上安装Opencv的问题

python - 从文本字段创建一个屏蔽数组

python - 无法多次获取 mysql 结果

python - 生成时将额外的分支添加到树中