Как выполнить общие задачи после инициализации в унаследованных классах?

Процесс инициализации группы классов, имеющих общего родителя, можно разделить на три части:

  • Общая инициализация
  • Инициализация для подкласса
  • Общая пост-инициализация

В настоящее время первые две части вызываются из метода __init__ каждого дочернего класса, но финальная часть после инициализации должна вызываться отдельно, например

class BaseClass:
    def __init__(self):
        print 'base __init__'
        self.common1()

    def common1(self):
        print 'common 1'

    def finalizeInitialization(self):
        print 'finalizeInitialization [common2]'


class Subclass1(BaseClass):
    def __init__(self):
        BaseClass.__init__(self)
        self.specific()

    def specific(self):
        print 'specific'


if __name__ == '__main__':
    s = Subclass1()  # Don't forget to finalize the initialization
    s.finalizeInitialization()  # now the object is fully initialized

Есть ли способ не звонить finalizeInitialization()? Или можно перевести вызов на finalizeInitialization() в Subclass1 на __init__ (как в ответ С. Лотта ). Это облегчает жизнь, но все же нужно помнить, чтобы завершить инициализацию, на этот раз внутри «конструктора». В любом случае, нет способа обеспечить полную инициализацию, что я и ищу.

10
задан martineau 8 October 2019 в 20:47
поделиться