Шаблон декоратора с инверсией уведомлений типа управления - PullRequest
0 голосов
/ 27 октября 2018

Извинения - название более напыщенное, чем рассматриваемая проблема (я плохо умею называть).У меня есть класс 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'со временем создаст их состояние с помощью асинхронных вызовов и начнет пересылку уведомлений о конфигурации только после их создания, но я думаю, что приведенный выше код отражает более общую ситуацию, для которой я хотел бы знать ответ.

...