Я реализую в Python следующее: (скелет кода ниже)
class Base(object):
def __init__(self, run_ext):
def common_method1(self, run_ext):
def common_method2(self, run_ext):
def run_all(self):
"""Run all the methods beginning with run*"""
class Ext1(Base):
def run11(self):
def run12(self):
def notrelated11(self):
class Ext2(Base):
def run21(self):
def run22(self):
def notrelated21(self):
Ext1.run_all() # should run all the *'run*'* methods in Ext1 and
Ext2.run_all() # should run all the *'run*'* methods in Ext2.
Цель: реализация run_all() в базовом классе, который запускал бы определенный набор методов из подкласса при вызове.
Мысли: - Ванильный способ сделать это - сделать явные вызовы методов в подклассах и определить run_all в родительском классе как абстрактный метод. - Несколько хакерский способ - установка атрибута (или идентификация методов, которые должны быть запущены, по их именам).
Я ищу любые лучшие альтернативные решения.
- Также хотелось бы знать, соответствует ли эта проблема какому-либо существующему шаблону проектирования?
Примечание. Дочерние классы могут содержать другие методы, кроме методов run1, run2 и т. д., упомянутых выше методов not_related.
Обновление: как указал @mkriheli, базовый класс не должен/не должен знать о дочерних классах, унаследованных от него.
Спасибо.