带有控件类型通知反转的装饰器模式

时间:2018-10-27 16:27:56

标签: python inversion-of-control decorator

道歉–标题比当前的问题更为浮夸(我不好称呼)。我有一个类A,及其派生类B。“ A”通过以下形式的代码为其派生类提供了一个通知类型框架:

def configure(self):
    if class_A_state_condition_expression:
        self._on_configured()

我希望在B类中执行一些其他配置工作。因此,我覆盖了configure:

def configure(self):
    super().configure()
    if class_B_state_condition_expression:
        self._on_configured()

然后,类C可以从“ B”或“ A”继承。但是,在上面的代码中,很明显'C'将对_on_configured()进行两次调用。一个最小的人为例子是:https://pastebin.com/52kY6pe7

所以,我的问题是:当我想向派生类提供门控通知时,什么是干净的解决方案?我可以想到明显的(如下),但是想知道是否有更好的解决方案:

class A:
...
def configure(self, notify):
    if class_A_state_condition_expression and notify:
        self._on_configured()

class B(A):
...
def configure(self, notify):
    super().configure(False)
    if class_B_state_condition_expression and notify:
        self._on_configured()

为具体起见,在我的特定情况下,目的是“ A”,“ B”和“ C”将通过一段时间内的异步调用来构造其状态,并且仅在构造它们之后才开始转发配置通知,但是,认为上面的代码捕获了我想知道答案的更一般的情况。

0 个答案:

没有答案