Процесс инициализации группы классов, имеющих общего родителя, можно разделить на три части:
- Общая инициализация
- Инициализация для подкласса
- Обычная пост-инициализация
В настоящее время первые две части вызываются из метода __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 () в __init__
из Subclass1 (как в ответе S.Lott ). Это облегчает жизнь, но все же нужно помнить, чтобы завершить инициализацию, на этот раз внутри «конструктора». В любом случае, нет способа обеспечить полную инициализацию, что я и ищу.