Я ищу совет о том, как построить проект, над которым я буду работать.Композиционное наследование в python
У меня есть базовый класс, с некоторыми методами.
class Base(object):
def method1(self):
# some code
def method2(self):
# some code
def method3(self):
# some code
... and some other methods
Для моего проекта, я не могу изменить класс Base, и я должен присущим от него, чтобы применить свои требования к проекту.
У меня есть несколько требований, которые могут быть активированы или нет. В зависимости от заданной конфигурации. То есть Я хотел бы иметь возможность переопределять методы method1(), method2(), method3() или любую их комбинацию.
Одним из вариантов является создание нескольких наследующих классов.
class Child1(Base):
def method1(self):
# some code
class Child2(Base):
def method2(self):
# some code
class Child3(Base):
def method3(self):
# some code
А затем, возможно, используйте множественное наследование, чтобы применить любой их состав. Однако этот подход не будет хорошо масштабироваться для покрытия всех возможных комбинаций .. (например, что произойдет, если у меня будет Child4()?)
Другая альтернатива - это просто один класс наследования и использовать предложения if
, чтобы выбрать, следует ли звонить супер-метод или применить производное поведение.
class Child(Base):
def method1(self):
if not self.override1:
# call super
else:
# some code
def method2(self):
if not self.override2:
# call super
else:
# some code
def method3(self):
if not self.override3:
# call super
else:
# some code
Я больше в пользу на эту альтернативу, но я чувствую, что должен быть лучше OO подход для этого.
Любые мысли или предложения?
Большое спасибо
PS: Я вынужден Python 2.7, а так как я планирую поделиться код, я предпочел бы иметь решение, которое легко понять, в среднем питона программиста (и не только передовые программисты).
Вопрос, вероятно, слишком широк.Если степень модификации заставляет экземпляр вести себя значительно иначе, чем экземпляры без этой модификации, - до такой степени, что его можно считать другой вещью, хотя и связанной, то я бы сказал, что ваше последнее решение неверно, и вам, вероятно, понадобится множественный подход наследования/микрин. – wwii