Метод 1
Очевидным является вызов сначала super()
, затем изменение атрибутов
class SubClass2(SuperClass2):
def __init__(self, passed_in):
super(SubClass2, self).__init__(passed_in)
self.attribute = 3 # i set attribute to 3 here
self.passed_in = passed_in
Метод 2
Делегировать назначение таких общих атрибутов суперклассу всегда, поэтому это будет выглядеть так:
class SuperClass2(object):
def __init__(self, passed_in, attribute=4):
self.attribute = attribute
self.passed_in = passed_in
self.shared_method()
def shared_method(self):
assert self.passed_in == self.attribute, ' sorry they are not equal '
class SubClass2(SuperClass2):
def __init__(self, passed_in):
super(SubClass2, self).__init__(passed_in=passed_in, attribute=3)
Метод 3
Делегирование инициализации отдельному методуи затем переопределите этот метод в подклассе
class SuperClass2(object):
def __init__(self, passed_in):
self._init(passed_in)
self.shared_method()
def _init(passed_in):
self.attribute = 4
self.passed_in = passed_in
def shared_method(self):
assert self.passed_in == self.attribute, ' sorry they are not equal '
class SubClass2(SuperClass2):
def __init__(self, passed_in):
super(SubClass2, self).__init__(passed_in=passed_in)
def _init(passed_in):
self.attribute = 3
self.passed_in = passed_in