我有一个类,我希望能够以不同的频率运行类(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/